Vuex中mutations.js内如何调用同文件中的另一个函数?
Vuex同文件内Mutations函数调用的正确方式
你遇到的问题是因为在Vuex的Mutations函数中,this的指向并非当前的Mutations对象,所以直接用this.updateSubjects会报错。下面是两种可行的解决方法:
方法一:先定义Mutations对象,内部直接引用调用
先把Mutations对象单独定义,之后在函数里直接通过这个对象调用目标方法,同时手动传入state参数:
const mutations = { async addQuestionAnswer(state, payload) { alert(payload); mutations.updateSubjects(state); alert("现在可以执行到这里了"); }, updateSubjects(state) { alert("updateSubjects被成功调用"); }, } export default mutations;
方法二:通过Actions触发多个Mutations(更符合Vuex规范)
如果你的业务逻辑允许,更推荐在Actions中触发多个Mutations,因为Vuex设计上建议Mutations只做同步的状态修改,异步操作应该放在Actions中处理,否则状态变更会难以追踪:
// actions.js export default { async addQuestionAnswer({ commit }, payload) { alert(payload); commit('updateSubjects'); alert("执行完成"); } } // mutations.js export default { updateSubjects(state) { alert("updateSubjects被成功调用"); }, }
额外提醒:你的示例中
addQuestionAnswer用了async,这不符合Mutations的设计原则,异步逻辑务必放在Actions中执行。
内容的提问来源于stack exchange,提问作者maxloo
相关产品推荐
相关产品推荐

