Join my Vue.js course while it's free 👀

Dispatch an action in another Vuex module

April 11, 2022  ‐ 1 min read

Splitting up your Vuex stores in different modules can help a lot to make sense of a larger Vue codebase. But every now and then you need a way to communicate between those modules, dispatching actions is the way to go. However, dispatching a Vuex action in a different module does require you to pass an extra argument.

In order to call an action in a different Vuex module you need to pass {root: true} as the third argument of the dispatch() function.

See the following example that dispatches the add action in the toppings module:

const store = new Vuex.Store({
  actions: {
    prepareSalamiPizza({ dispatch }) {
      dispatch("toppings/add", "salami", { root: true });
    },
  },
});

Do keep in mind that {root: true} should always be the third argument in dispatch() even if the action you call doesn’t require a payload. In such a case it is up to you what you pass as the second argument, or payload, to dispatch(). A sensible option, in my opinion, would be null or an empty object({}).