通过对vuex源码的阅读,现在总结如下:
1. Vuex是一个普通的对象。
2. store的实例化是通过new ModelCollection去整理模块之间的关系,同时根据store和构建的上下文去注册mutation,action,getters,
3. Vuex中间实现的链路就是
Store.getters[key] => store._vm[key] => computed[key] =>raw(local.state...store.state)=>this._vm._data.$$state
4. 通过store.state赋值给_vm.data达到store.state是响应式的效果。
5. 通过store.getter赋值给_vm.computed达到store.getters具有计算属性的能力。
6. dispatch通过Promise.all去处理多个action的情况
7. registerModule通过以下3步去动态添加模块
- 扩展模块(ModuleCollection的register方法),
- 安装模块(installModule)
- 重新生成Store中的Vue实例(store._vm)
8 mapState等都是通过访问this.$store来访问到需要的数据的。
9. Vuex插件就是执行store.subscribe方法,然后Store在commit的时候会遍历执行订阅者的回调函数,然后就可以获取到mutation和state的变化了。
然后所有的插件都是在mutation和state上的变化上去做一些事情。
网友评论