在 Vuex 和 Vue 的组合中,mapMutations
是一个辅助函数,它用于帮助你在组件的方法中映射 mutation
,这样你就可以直接使用它们来更新 Vuex store 中的状态,而不需要每次都手动调用 this.$store.commit()
。
当你看到这样的代码:
javascript复制代码
...mapMutations('appSetting', ['setActiveKey']) |
这行代码的含义是,它正在从 appSetting
这个命名空间中映射 setActiveKey
这个 mutation 到当前组件的方法中。这意味着在你的组件内部,你现在可以直接调用 this.setActiveKey(payload)
来代替 this.$store.commit('appSetting/setActiveKey', payload)
。
这里有几个关键点需要注意:
-
命名空间(Namespace):
'appSetting'
是 Vuex store 中的一个命名空间。如果你的 Vuex store 被组织成了模块,每个模块可能有一个命名空间,用于防止不同模块之间的 mutation、action、getter 名称冲突。在这个例子中,setActiveKey
是appSetting
模块下的一个 mutation。 -
Mutation 名称:
['setActiveKey']
是一个包含 mutation 名称的数组。这意呀着mapMutations
会创建一个与 mutation 名称相同的方法,并将其映射到你的组件中。 -
使用方法:在你的组件方法中,你现在可以像调用普通方法一样调用
setActiveKey
,但请记住,你仍然需要传递任何必要的参数(payload),这些参数将被传递给 Vuex store 中的setActiveKey
mutation。 -
组件内使用:在你的组件的
methods
选项中,你不需要显式地声明setActiveKey
方法,因为mapMutations
已经为你做了这件事。但是,你需要确保在组件的methods
选项中包含...mapMutations(...)
的结果。
示例:
javascript复制代码
export default { | |
// ... 其他选项 ... | |
methods: { | |
...mapMutations('appSetting', ['setActiveKey']), | |
someOtherMethod() { | |
// 调用 setActiveKey mutation | |
this.setActiveKey('someKeyValue'); | |
} | |
} | |
} |
在这个例子中,someOtherMethod
是组件中的一个方法,它调用了 setActiveKey
mutation 来更新 Vuex store 中的状态。由于 setActiveKey
已经被映射到组件的方法中,所以你可以直接通过 this.setActiveKey(...)
来调用它。