上一章,咱們介紹了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),判斷模塊配置信息中,有沒有子模塊的配置
小結