如何在Vuex中从另一个action中调用一个action?

mqkwyuun  于 2023-06-24  发布在  Vue.js
关注(0)|答案(5)|浏览(167)

我的操作设置如下:

get1: ({commit}) => {
  //things
  this.get2(); //this is my question!
},
get2: ({commit}) => {
  //things
},

我希望能够从另一个动作中调用一个动作,所以在这个例子中,我希望能够从get1()中调用get2()。这可能吗?如果可能,我该怎么做?

r7xajy2e

r7xajy2e1#

您可以访问传入第一个参数的对象中的dispatch方法:

get1: ({ commit, dispatch }) => {
  dispatch('get2');
},

这在文档中有所涉及。

2izufjch

2izufjch2#

你可以通过第一个参数(context)访问dispatch方法:

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2')
  }
}

但是,如果使用命名空间,则需要指定一个选项:

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2', {}, { root: true })
  }
}
h7appiyu

h7appiyu3#

对于不需要有效负载的操作

actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        await context.dispatch('BEFORE');
    }
}

对于需要payload的操作

actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        var payload = {}//prepare payload
        await context.dispatch('BEFORE', payload);
    }
}
yr9zkbsy

yr9zkbsy4#

我们也可以在分派时传递参数。

dispatch('fetchContacts', user.uid);
jrcvhitl

jrcvhitl5#

export actions = {
  GET_DATA (context) {
     // do stuff
     context.dispatch('GET_MORE_DATA');
  },

  GET_MORE_DATA (context) {
    // do more stuff
  }
}

相关问题