上一章,咱们介绍了Vuex组件的安装过程,安装的最后,进行了对Store对象的引用(或对Store的建立)。本章将介绍Store(Vuex存贮类)的建立。html
new Vuex.Store({...})
。【一些断言】断言是否被注册,断言是否支持promise,断言类有没有被正确的实例化。这些断言语句,在vue build出来之后。报错信息会被忽略掉。前端
各项数据容器的定义,部分重要容器,咱们在第0章中详细介绍过,(不理解的同窗,可回头细读)vue
this._committing = false
// 提交状态标识,在严格模式时,防止非commit操做下,state被修改this._actions = Object.create(null)
// action 函数的数组的对象,保存全部action回调函数,node
this._mutations = Object.create(null)
// mutation 函数的数组的对象,保存全部的mutations回调函数,this._subscribers = []
// 订阅 mutation 操做的函数数组。里面的每一个函数,将在 commit 执行完成后被调用,该功能经常使用于插件,与主功能无关this._actionSubscribers = []
// 订阅 action 操做的函数数组。里面的每一个函数,将在 action函数被调用前被调用,该功能经常使用于插件,与主功能无关this._wrappedGetters = Object.create(null)
// 保存 getter 函数的函数数组对象容器。this._modules = new ModuleCollection(options)
// 解析并生成模块树,经过树结构,保存配置文件内容this._modulesNamespaceMap = Object.create(null)
// 保存命名空间的模块对象,以便在辅助函数createNamespacedHelpers中快速定位到带命名空间的模块this._watcherVM = new Vue()
// 定义一个Vue对象,Vue类在调用Vuex安装函数,install时,被传递进来获取 dispatch函数 与 commit函数,并复写该函数webpack
源码注释还未彻底整理,纯当阅读笔记,大神请勿较真git
形参rawRootModule,在Store中new ModuleCollection(options)传入,而options是Store的构造函数参数,即咱们在生成Store实例,调用new Vuex.Store({...})
时传入的参数,如github
{ state, getters, actions, mutations, }
参数解析,path, rawModule, runtime = trueweb
【assertRawModule】vuex
建立模块对象 const newModule = new Module(rawModule, runtime),找到module.js文件找到其构造函数。npm
构造函数参数
具体操做,
经过 path 数组判断当前模块是否为根模块
不是根模块,则经过 get方法 获取父模块对象
get函数内部,使用了数组的reduce方法,
调用父模块的addChild方法,path[path.length - 1]得到的是本模块的名,newModule 是由本模块配置文件生成的模块对象
if (rawModule.modules),判断模块配置信息中,有没有子模块的配置
小结