ChatGPT解决这个技术问题 Extra ChatGPT

从另一个动作中调用一个动作

我的操作有以下设置:

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

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


k
kissu

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

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

documentation 对此进行了介绍。


动作完成后有没有办法做某事?基本上将它与 then() 一起使用?
是的,它已在我链接的文档页面中完全涵盖
如何从另一家商店分派行动?例如在店内 AI 想做dispatch('B/someaction')
1
17axaH

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

导出常量操作 = { get({ commit, dispatch }) { dispatch('action2') } }

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

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


k
kissu

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

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

对于需要有效负载的操作

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

k
kissu

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

dispatch('fetchContacts', user.uid);

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

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