正确的方法在vuex中创建动作

时间:2018-05-18 12:52:20

标签: javascript vue.js vuex

是否足以创建简单(没有链接/ 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();
            });
        },        

...
     

2 个答案:

答案 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')`
    })
  }
}