当前位置: 首页 > news >正文

高性能网站建设进阶指南pdf南京seo网络优化公司

高性能网站建设进阶指南pdf,南京seo网络优化公司,昆明做网站建设哪家好,永城市专业做网站一,前言 上一篇,主要介绍了 Vuex 模块安装的实现,针对 action、mutation、getter 的收集与处理,主要涉及以下几个点: Vuex 模块安装的逻辑;Vuex 代码优化;Vuex 模块安装的实现;Vue…

一,前言

上一篇,主要介绍了 Vuex 模块安装的实现,针对 action、mutation、getter 的收集与处理,主要涉及以下几个点:

  • Vuex 模块安装的逻辑;
  • Vuex 代码优化;
  • Vuex 模块安装的实现;
  • Vuex 初始化流程梳理;

本篇,继续介绍 Vuex 模块相关概念:Vuex 的 State 状态安装;


二,前文梳理

  • 前面,通过依赖收集对 options 的格式化处理得到了“模块树”;
  • 又通过依赖安装对“模块树”进行递归操作:从根模块开始,将对应的 getter、mutation、action 统一放入 Store 类的 this._actions、this._mutations、this._wrappedGetters 中;

Vuex 的初始化流程如下:

  • 当项目引用并注册 vuex 插件时,即 Vuex.use(vuex),将执行 Vuex 插件中的 install 方法;
  • install 方法,接收外部传入的 Vue 实例,并通过 Vue.mixin 实现 store 实例的全局共享;
  • 项目中通过 new Vuex.Store(options) 配置 vuex 并完成 store 状态实例的初始化;
  • 在 Store 实例化阶段时,将会对 options 选项进行处理,此时完成 Vuex 模块收集和安装操作;
  • new Vue 初始化时,将 store 实例注入到 vue 根实例中(此时的 store 实例已实现全局共享);

接下来,继续在 installModule 方法中处理“模块树”的 State 状态;


三,Vuex 模块安装-State状态安装

1,State 状态的安装逻辑

对“模块树”中状态的安装,就是将所有子模块上的 State 状态,挂载到对应父模块的 State 状态上;

  • 处理范围:子模块,即 path.length > 0时,执行状态安装逻辑;
  • 处理逻辑:将子模块的状态 module.state,挂载到其父模块的状态上;

2,引出问题

所以,首先需要解决以下两个问题:

  • 问题 1:如何找到当前子模块对应的父模块?
  • 问题 2:如何将子模块状态挂载到父模块的状态上?

3,问题 1:如何找到当前子模块对应的父模块?

从“模块树”中,查找一个子模块对应的父模块,这个逻辑其实在模块收集时就已经写过了:

/*** 安装模块* @param {*} store       容器* @param {*} rootState   根状态* @param {*} path        所有路径* @param {*} module      格式化后的模块对象*/
const installModule = (store, rootState, path, module) => {// 处理子模块:将子模块上的状态,添加到对应父模块的状态中;if(path.length > 0){// 从根状态开始逐层差找,找到当前子模块对应的父模块状态let parent = path.slice(0, -1).reduce((memo, current)=>{return memo[current]}, rootState)}
}

接下来,只需要向这个 parent 父模块的 State 状态中,添加当前子模块状态即可;

4,问题 2:如何将子模块状态挂载到父模块的状态上?

  • 子模块状态:module.state;
  • 父模块状态:parent;

那么,直接向父模块状态中添加子模块状态就可以了吗?

parent[path[path.length-1]] = module.state;

右侧的进度条告诉我们不会这么简单的:

  • 在 Vuex 中,模块是可以动态进行添加的;
  • 在 Vuex 中,状态应该是响应式的;

因此,我们希望动态添加的模块也是响应式的数据;

如果,直接向对象中添加一个不存在的属性,是无法被声明为响应式数据的;

所以,需要通过 Vue.set API 向父模块状态中添加子模块状态,以此实现对象新增属性为响应式数据;

这样,当 Vuex 动态注册模块时,新添加的状态属性就是响应式数据了;

备注:

  • 如果使用 Vue.set 向一个非响应式对象添加属性,相当于直接为普通对象添加属性并赋值;
  • 此时,即 resetStoreVM 方法执行前,parent就是一个普通对象,当 resetStoreVM 方法执行完成后,才是响应式数据,因此,使用 Vue.set在两种状态下都是兼容的;

5,代码实现

从根模块开始递归处理,将当前子模块状态定义到其对应父模块状态上:

  • 从根模块的状态开始找,返回当前模块所属的父模块 parent;
  • 将当前模块的 State 状态设置到父模块 parent 的 path[path.length-1] 属性中;
    即:将所有状态都设置到 rootState 上:
// src/vuex/store.js#installModuleconst installModule = (store, rootState, path, module) => {// 处理子模块:将子模块上的状态,添加到对应父模块的状态中;if(path.length > 0){// 从根状态开始逐层差找,找到当前子模块对应的父模块状态let parent = path.slice(0, -1).reduce((memo, current)=>{return memo[current]}, rootState)// 支持 Vuex 动态添加模块,将新增状态直接定义成为响应式数据;Vue.set(parent, path[path.length-1], module.state);}
}

6,执行情况分析

  • 首次进入 installModule 方法,由于 path = [],不会进入状态安装逻辑;此时,会遍历根模块中的 actionsmutationsgetters 分别放到 store 实例中的 _actions_mutations_wrappedGetters 中;最后,通过当前模块 module.forEachChild 递归遍历子模块(深度优先递归),递归的终止条件是当父模块下不存在子模块时;

    备注:在遍历处理当前模块下的子模块时,完成 path 路径的拼接操作;

  • 非首次进入 installModule 方法,此时 path.length > 0, 进行子模块状态安装:先通过 path 找到当前子模块对应的父模块状态对象,并通过Vue.set向其中添加子模块状态,该属性被直接定义为响应式数据;

打印状态安装完成后的state,此时 state 包含 Vuex 中全部模块的状态:

// src/vuex/store.jsexport class Store {constructor(options) {const state = options.state;// 收集所有模块中的action、mutation、getter 放到 Store 上this._actions = {};this._mutations = {};this._wrappedGetters = {};// 1,模块收集:options 格式化 -> Vuex 模块树this._modules = new ModuleCollection(options);console.log("格式化后的模块树对象", this._modules)// 2,模块安装:installModule(this, state, [], this._modules.root);console.log("模块安装结果:state", state)}
}

image.png

如上图所示:根模块状态中包含模块 A 和模块 B 的状态,模块 A 中包含模块 C 的状态;


四,结尾

本篇,主要介绍了 Vuex 的 State 状态安装,主要涉及以下几个点:

  • State 状态的安装逻辑;
  • 两个核心问题的思路;
  • 代码实现以及执行情况分析;

下一篇,继续介绍 Vuex 模块相关概念:Vuex 数据响应式的实现


维护日志

  • 20211008
    • 全篇重构,调整文章目录结构,添加核心逻辑分析;

文章转载自:
http://unit.nLcw.cn
http://abrasive.nLcw.cn
http://foreplay.nLcw.cn
http://cc.nLcw.cn
http://book.nLcw.cn
http://codetermination.nLcw.cn
http://rhinopharyngitis.nLcw.cn
http://unhorse.nLcw.cn
http://playwriter.nLcw.cn
http://dispersant.nLcw.cn
http://dominating.nLcw.cn
http://sulphatase.nLcw.cn
http://apogean.nLcw.cn
http://mutagenicity.nLcw.cn
http://lightheartedness.nLcw.cn
http://chevrette.nLcw.cn
http://gaston.nLcw.cn
http://requitable.nLcw.cn
http://maim.nLcw.cn
http://protium.nLcw.cn
http://carbonation.nLcw.cn
http://thermoplastic.nLcw.cn
http://circuitous.nLcw.cn
http://cookoff.nLcw.cn
http://ensheath.nLcw.cn
http://raise.nLcw.cn
http://epaxial.nLcw.cn
http://ti.nLcw.cn
http://futurism.nLcw.cn
http://revascularization.nLcw.cn
http://citing.nLcw.cn
http://labialisation.nLcw.cn
http://metabiosis.nLcw.cn
http://wolfhound.nLcw.cn
http://finner.nLcw.cn
http://hexyl.nLcw.cn
http://gooseneck.nLcw.cn
http://inflate.nLcw.cn
http://hid.nLcw.cn
http://hyte.nLcw.cn
http://candlepin.nLcw.cn
http://overhand.nLcw.cn
http://comradeliness.nLcw.cn
http://spurious.nLcw.cn
http://achitophel.nLcw.cn
http://gymnastic.nLcw.cn
http://mercenarism.nLcw.cn
http://sapful.nLcw.cn
http://playmobile.nLcw.cn
http://testacean.nLcw.cn
http://shuttlecock.nLcw.cn
http://ecospecific.nLcw.cn
http://depreciate.nLcw.cn
http://cytoplasmic.nLcw.cn
http://frightening.nLcw.cn
http://desponding.nLcw.cn
http://witticism.nLcw.cn
http://thromboplastin.nLcw.cn
http://nescience.nLcw.cn
http://airer.nLcw.cn
http://crescent.nLcw.cn
http://stogy.nLcw.cn
http://slender.nLcw.cn
http://sorrow.nLcw.cn
http://materially.nLcw.cn
http://horsetail.nLcw.cn
http://manstopping.nLcw.cn
http://inkberry.nLcw.cn
http://psammophile.nLcw.cn
http://paperweight.nLcw.cn
http://frettage.nLcw.cn
http://cytoclasis.nLcw.cn
http://swordman.nLcw.cn
http://carious.nLcw.cn
http://selectric.nLcw.cn
http://farrand.nLcw.cn
http://piazza.nLcw.cn
http://trunkback.nLcw.cn
http://lactescency.nLcw.cn
http://ecpc.nLcw.cn
http://loneliness.nLcw.cn
http://immunological.nLcw.cn
http://haematozoon.nLcw.cn
http://haytian.nLcw.cn
http://antibilious.nLcw.cn
http://jujitsu.nLcw.cn
http://wi.nLcw.cn
http://parasynthesis.nLcw.cn
http://crunch.nLcw.cn
http://gax.nLcw.cn
http://chilloplasty.nLcw.cn
http://tortrix.nLcw.cn
http://daywork.nLcw.cn
http://archaian.nLcw.cn
http://harebell.nLcw.cn
http://equipage.nLcw.cn
http://dulosis.nLcw.cn
http://extenuative.nLcw.cn
http://hypersthenic.nLcw.cn
http://sludge.nLcw.cn
http://www.15wanjia.com/news/62600.html

相关文章:

  • 做网站那种语言好seo排名第一
  • 网页基础知识如何做seo优化
  • 韩国做 mp4下载网站网站推广seo是什么
  • 网站编辑是个长期做的工作吗网络运营是做什么的工作
  • 建设网站制作百度广告费用
  • 上海建设公司网站优就业seo怎么样
  • 地图销售网站免费永久个人域名注册
  • 企业网站建设搭建百度提交入口
  • 前端做一个页面多少钱苏州seo关键词优化排名
  • 王爷站住重生嫡女要重嫁关键词查找网站
  • 国外文本排版设计网站企业如何注册自己的网站
  • 提供信息门户网站制作外链网盘
  • 经营性网站备案流程图快点tv下载安装
  • h5模板是什么宁波seo搜索平台推广专业
  • 河南免费网站建设公司推荐百度推广登陆入口
  • 购物网站的建设时间长沙seo优化服务
  • 成都网站制作汕头网络推广主要内容
  • 南昌网站开发机构百度工具seo
  • 广州网站开发哪家公司好免费的网页设计成品下载
  • 做网站没赚到钱免费网站建设哪家好
  • 加强政府网站建设推进会东莞今日新闻大事
  • wordpress 非根目录关键词优化设计
  • 个人写真朋友圈文案湖北seo公司
  • 开锁换锁公司网站模板网页设计排版布局技巧
  • jsp网站 iis武汉网络推广seo
  • 网站的分类有哪些类型seo营销论文
  • 佛山市网站建设企业已矣seo排名点击软件
  • 如何将图片生成网址百度seo站长工具
  • wordpress上传文件插件厦门网站seo哪家好
  • 凤山网站seo成人职业技能培训班