Vuex在同一个模块中mutations下的函数该如何调用同模块下的actions下的函数
时间: 2024-01-04 12:02:16 浏览: 72
在同一个模块中,mutations可以通过context.commit()方法来调用同模块下的其他mutations中的方法,也可以通过context.dispatch()方法来调用同模块下的actions中的方法。
具体来说,可以在mutations中使用context.commit()方法来触发同模块下其他mutations中的方法,例如:
```javascript
// module.js
const module = {
state: {
count: 0
},
mutations: {
increment(state) {
state.count++
},
incrementTwice(state) {
context.commit('increment') // 调用同模块下的increment方法
context.commit('increment') // 再次调用同模块下的increment方法
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment')
}, 1000)
}
}
}
```
在上面的代码中,mutations中的incrementTwice方法会通过context.commit()方法来调用同模块下的increment方法,这是因为在同一模块下的mutations和actions共享同一个context对象。
如果需要在mutations中调用同模块下的actions中的方法,可以通过context.dispatch()方法来触发,例如:
```javascript
// module.js
const module = {
state: {
count: 0
},
mutations: {
incrementAsync(state) {
context.dispatch('incrementAsync') // 调用同模块下的incrementAsync方法
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment')
}, 1000)
}
}
}
```
在上面的代码中,mutations中的incrementAsync方法会通过context.dispatch()方法来调用同模块下的actions中的incrementAsync方法。需要注意的是,actions中的方法必须通过store.dispatch()来调用,而mutations中的方法则通过context.commit()来调用。
阅读全文