180 votes

Appeler une action à partir d'une autre action

J'ai la configuration suivante pour mes actions :

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

Je veux pouvoir appeler une action à partir d'une autre, donc dans cet exemple je veux pouvoir appeler get2() de l'intérieur get1() . Est-ce possible, et si oui, comment puis-je le faire ?

362voto

thanksd Points 25423

Vous avez accès à la dispatch dans l'objet passé en premier paramètre :

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

Ce sujet est traité dans le documentation .

1 votes

Existe-t-il un moyen de faire quelque chose une fois qu'une action est terminée ? En gros, utiliser ceci avec un then() ?

3 votes

Oui, c'est entièrement couvert dans la page de documentation dont j'ai donné le lien.

3 votes

Comment puis-je envoyer une action à partir d'un autre magasin ? Par exemple, dans le magasin A, je veux effectuer les opérations suivantes dispatch('B/someaction')

8voto

17axaH Points 365

Vous pouvez accéder à la méthode de répartition par le biais du premier argument (contexte) :

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

Cependant, si vous utilisez l'espacement des noms, vous devez spécifier une option :

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

6voto

ANinJa Points 1077

Pour les actions qui ne nécessitent pas de charge utile

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

pour les actions qui nécessitent charge utile

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

3voto

sau0409 Points 103

Nous pouvons également passer des paramètres lors de la répartition.

dispatch('fetchContacts', user.uid);

0voto

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X