Vuex之module

wade3po發表於2019-02-02

由於使用單一狀態樹,應用的所有狀態會集中到一個比較大的物件。當應用變得非常複雜時,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個人筆記 公眾號

相關文章