How to call an action from within another action in Vuex?
Asked Answered
H

5

228

I have the following setup for my actions:

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

I want to be able to call one action from within another, so in this example I want to be able to call get2() from within get1(). Is this possible, and if so, how can I do it?

Hagioscope answered 23/8, 2017 at 20:44 Comment(0)
C
444

You have access to the dispatch method in the object passed in the first parameter:

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

This is covered in the documentation.

Charley answered 23/8, 2017 at 20:55 Comment(4)
Is there a way to do something once an action is complete? Basically use this with a then()?Hagioscope
Yep, it's fully covered in the documentation page I linkedCharley
How can I dispatch an action from another store? e.g. in store A I want to do dispatch('B/someaction')Mons
@Guus #42984632Charley
H
19

You can access the dispatch method through the first argument (context):

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

However, if you use namespaced you need to specify an option:

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2', {}, { root: true })
  }
}
Hobbism answered 22/12, 2020 at 14:30 Comment(0)
L
12

for actions that does not require payload

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

for actions that does require payload

actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        var payload = {}//prepare payload
        await context.dispatch('BEFORE', payload);
    }
}
Lupelupee answered 5/6, 2020 at 14:15 Comment(0)
G
5

we can pass parameters also while dispatching.

dispatch('fetchContacts', user.uid);
Germaun answered 9/8, 2020 at 20:29 Comment(0)
M
3
export actions = {
  GET_DATA (context) {
     // do stuff
     context.dispatch('GET_MORE_DATA');
  },

  GET_MORE_DATA (context) {
    // do more stuff
  }
}
Microseism answered 22/1, 2020 at 16:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.