Vuex.Store 构造函数
判断是否自动安装vue
初始化内部变量,将dispatch与commit调用的this绑定为store对象本身,否则在组件内部this.dispatch时的this会指向组件的vm
是否严格模式
执行installModule(初始化module)
执行resetStoreVM(通过VM使store“响应式”)
调用插件、devtool
1 | export class Store { |
class ModuleCollection
上面有句this._modules = new ModuleCollection(options);
作用:收集模块,构造模块树结构
1 | export default class ModuleCollection { |
class Module
接下来看看Module的实例
1 | // store 的模块 基础数据结构,包括一些属性和方法 |
installModule 函数
- 为module加上namespace名字空间(如果有)
- 注册mutation、action以及getter,同时递归安装所有子module。
1 | /* 初始化module */ |
resetStoreVM 函数
遍历wrappedGetters,使用Object.defineProperty方法为每一个getter绑定上get方法,这样我们就可以在组件里访问this.$store.getter.test就等同于访问store._vm.test
然后new一个Vue对象来实现数据的“响应式化”,运用Vue.js内部提供的数据双向绑定功能来实现store的数据与视图的同步更新
1 | /* 通过vm重设store,新建Vue对象使用Vue内部的响应式实现注册state以及computed */ |