參數介紹html
new Vuex.Store({...})
生成的對象
獲取模塊的命名空間vue
有命名空間,則以模塊名結合"/",造成命名空間路徑,即本函數是獲取模塊的命名空間前綴,如對應下圖,moduleC的命名空間前綴爲'moduleA/moduleC/',其中moduleB並無設置命名空間vuex
{ moduleA:{ namespaced:true, modules:{ moduleB:{ namespaced:false, modules:{ moduleC:{ namespaced:true, } } } } } }
對於非根模塊segmentfault
經過getNestedState,尋找父模塊的 state對象。api
調用store的_withCommit函數數組
在_withCommit函數中數據結構
建立模塊內容,makeLocalContext(store, namespace, path)。並將生成的content內容放在module.content中。咱們跳轉這裏,看看makeLocalContext具體操做app
調用module.forEachMutation方法,對模塊的mutation方法進行註冊ide
registerMutation註冊函數函數
調用module.forEachAction方法,對模塊的action進行註冊
參數介紹
定義local對象
定義local對象的dispatch函數
有命名空間,則在使用 Store 實例的dispatch函數前,對參數進行一些處理
{ moduleA:{ namespaced:true, modules:{ moduleB:{ namespaced:false, modules:{ moduleC:{ namespaced:true, actions: { actionC (context) {...} } } } } } } }
定義commit函數
調用Object.defineProperties函數,往local對象中添加兩個變量getters和state,設置local對象的getter和state
定義getters變量,並設置其攔截器。一樣的,判斷是否有命名空間前綴
不然調用makeLocalGetters函數,生成本身的getters
遍歷store.getters中的全部函數,(store.getters變量暫時還未定義到,其指向 store的_wrappedGetters,getter函數容器)
小結,
定義state,及其攔截器
小結