是否足以创建简单(没有链接/ catch调用)vuex-actions为a1?或者我每次都要用Promise创建为a2(+也添加拒绝分支)来编写它?
提前谢谢你......
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
const debug = process.env.NODE_ENV !== 'production';
export default new Vuex.Store({
state: { ... }
...
actions: {
a1: (state, response) => {
state.commit('setNavMenu',{signIn: true, signUp: true, signOut: false});
...
},
a2: (state, response) => {
return new Promise((resolve) => {
state.commit('setNavMenu',{signIn: true, signUp: true, signOut: false});
...
resolve();
});
},
...
答案 0 :(得分:1)
可以创建一个同步操作(没有promise或其他异步代码),就像你的第一个a1
然而,您可以直接调用变异函数,在a1
情况下,它将是setNavMenu
。
动作和突变之间的主要区别在于,当突变不能时,动作可以是异步的,基本上如果你不需要你的动作来执行异步。代码,你不需要一个动作,只能使用变异。
有关详细信息,请查看有关操作https://vuex.vuejs.org/en/actions.html
的官方文档答案 1 :(得分:0)
如果操作具有异步方面或想要从您的操作中获得响应,则不会这样做。
如果您的所有更新都具有同步性(不依赖于API或任何异步反馈),您甚至可以直接调用这些突变,完全跳过这些操作。
即。 (来自官方文件)
import { mapMutations } from 'vuex'
export default {
// ...
methods: {
...mapMutations([
'increment', // map `this.increment()` to `this.$store.commit('increment')`
// `mapMutations` also supports payloads:
'incrementBy' // map `this.incrementBy(amount)` to `this.$store.commit('incrementBy', amount)`
]),
...mapMutations({
add: 'increment' // map `this.add()` to `this.$store.commit('increment')`
})
}
}