vuex中module的命名空間概念
vuex中module的命名空間概念
-
默認情況下,模塊內部的 action、mutation 和 getter 是注冊在全局命名空間的。
- 弊端1:不同模塊中有相同命名的mutations、actions時,不同模塊對同一 mutation 或 action 作出響應。
- 弊端2:當一個項目中store分了很多模塊的時候,在使用輔助函數mapState、mapGetters、mapMutations、mapActions時,很難查詢,引用的state、getters、mutations、actions來自於哪個模塊,不便於后期維護。

-
可以通過添加
namespaced: true的方式使其成為帶命名空間的模塊。當模塊被注冊后,它的所有 getter、action 及 mutation 都會自動根據模塊注冊的路徑調整命名。-
在模塊中添加 namespaced: true, 開始命名空間

-
在根store中引入模塊並掛載

-
組件中使用模塊中定義的“permissionList” state
-
第一種方式
// 1. 導入輔助函數mapStateimport { mapState } from "vuex";export default {props: {data: {type: Object,default: "chart"}},data() {return {list: {}};},computed: {//2. 在輔助函數mapState的第一參數上,填寫上模塊的命名空間名。根據掛載方式不同,此處的命名空間名就是 wechatType 或 aaa。...mapState('命名空間名', ["permissionList"])},
-
第二種方式
//通過使用 createNamespacedHelpers 創建基於某個命名空間輔助函數。//它返回一個對象,對象里有新的綁定在給定命名空間值上的組件綁定輔助函數import { createNamespacedHelpers } from "vuex";const { mapState } = createNamespacedHelpers('命名空間名')export default {computed: {...mapState(["permissionList"])}}
-
-
