由於使用單一狀態樹,應用的所有狀態會集中到一個比較大的物件。當應用變得非常複雜時,store 物件就有可能變得相當臃腫。
為了解決以上問題,Vuex 允許我們將 store 分割成模組(module)。每個模組擁有自己的 state、mutation、action、getter、甚至是巢狀子模組——從上至下進行同樣方式的分割。
新建一個js,moduleA:
const state = { moduleMsg: '這是模組a的資料'}export default { namespaced: true, state}
要特別注意的是namespaced: true,一定要加,使其成為帶名稱空間的模組。否則會報錯:
[vuex] module namespace not found in mapState(): modulea
我們在store裡面注入模組:
import modulea from './moduleA'
export default new Vuex.Store({ state, getters, actions, mutations, modules: { modulea }})
然後元件使用:
{{this.$store.state.modulea.moduleMsg}}
之前有提過,各個輔助函式都會接收一個引數,所以:
...mapState( 'modulea', ['moduleMsg'])
包括mapAction、mapMutation等都是一樣的。
在對於很大的專案把vuex分模組是很有必要的,但是真的不應該盲目的去使用。
歡迎關注Coding個人筆記 公眾號