图片授权基于CC0协议
在视图「View」上来派发动作「Actions」,Actions 会对数据「State」进行修改,数据修改后会触发视图「View」的更新。
Vuex 相比起 全局变量 更加数据化,有规则,而且方便追踪状态变化。
git clone https://github.com/vuejs/vuex.git
我们在项目中 main.js 执行的方法 Vue.use(vuex) ,会去执行 Vuex 的 install 方法。
install 方法里执行 applyMixin 先去判断版本,2.x 和 1.x 的区别对待;
在 Vue 的根组件上传入 store ,赋值给 this.$store 挂载到 Vue 上。可以通过 this.$store 来访问 Vue 的实例;
实例化之前要进行 Vue.use(Vuex) ,而且使用的环境要支持 Promise,还会在 store 里面定义私有的属性:_actions、_mutations、_modules。
1、new ModuleCollection(options)
参数 options 就是我们外面定义的对象,我们在写 store 的时候,会去定义 state/getters/mutations 等方法。
这个类里面会执行 this.register 方法,返回一个 this.root ,this.root会包含我们定义的 state/getters/mutations 等方法。
如果有子模块,会递归执行 this.register「去建立父子关系」,挂在到 _children 上。
2、installModule 注册和赋值
遍历 mutation、action、getter、child,来完成 install 的过程。
拿 mutation 来说吧,会执行 registerMutation 方法,把我们定义的方法添加到 store._mutations 上,会添加 namespace 来拼接,如果有子模块,就拼接子模块名称和方法名。
先去添加一个 store.getters = {};
执行 forearchValue 循环遍历 wrappedGetters 赋值给 store.getters ,然后 Object.defineProperty 定义 get 方法「设置属性特征」。
其次还会执行:
我们访问 store.state 就可以访问到 root module 的 state 了Vuex 还提供了语法糖 mapGetters、mapActions、mapMutations 来获取数据、处理数据、提交数据。
JavaScript 性能测试
参考资料:
《Vue.js源码全方位深入解析》
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34562.html