从另一个动作中调用动作

mut*_*y91 96 vue.js vuex

我的行为有以下设置:

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

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

tha*_*ksd 190

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

get1: ({ commit, dispatch }) => {
  dispatch('get2');
},
Run Code Online (Sandbox Code Playgroud)

这在文档中有所涉及.

  • 是的,它已完全包含在我链接的文档页面中 (3认同)
  • @Guus /sf/ask/3008889271/ (3认同)
  • 我该如何从其他商店分派动作?例如在商店AI中想执行`dispatch('B / someaction')` (2认同)

小智 11

您可以通过第一个参数(上下文)访问 dispatch 方法:

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2')
  }
}
Run Code Online (Sandbox Code Playgroud)

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

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2', {}, { root: true })
  }
}
Run Code Online (Sandbox Code Playgroud)


ANi*_*nJa 6

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

actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        await context.dispatch('BEFORE');
    }
}
Run Code Online (Sandbox Code Playgroud)

对于确实需要有效负载的操作

actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        var payload = {}//prepare payload
        await context.dispatch('BEFORE', payload);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我们也可以在调度时传递参数。

dispatch('fetchContacts', user.uid);
Run Code Online (Sandbox Code Playgroud)