Existe-t-il un moyen pour une dépêche/une action d'appeler un getter à l'intérieur?
mutations: {
setData(state, data) {
state.data = data;
}
}
actions: {
sendDataToServer({ commit }, payload) {
// call getter (data) and assign to variable
// do async functions from the data returned
}
},
getters: {
getAppData: state => () => {
return state.data;
}
}
Alors, quelle est la meilleure pratique ici? Utiliser la mutation pour changer d'état, puis obtenir l'état et le passer à une action qui exécutera ensuite la fonction asynchrone ou dois-je restructurer ma mise en œuvre?
call mutation -> récupère les données via getter -> call action
OR
tout faire sur l'action (faire la mutation sur l'action et la méthode action/asynchrone sans avoir besoin du getter)?
Dans l'action, vous voyez que le premier paramètre contient {commit}
. De même, vous pouvez passer {commit, state}
. De cette façon, vous pouvez accéder directement à l'état.data.
Je pense que dans votre exemple, vous voudriez effectuer l'action car vous pouvez appeler la mutation de l'action interne à l'aide de commit('setData')
.
Le premier paramètre est là pour que vous utilisiez l'état et la mutation comme vous préférez. Personnellement, je n'ai travaillé que sur des projets où vous faites l'action en premier et faites la mutation pour la stocker dans l'application. Par exemple, si je veux stocker une information de voiture quelque part sur le serveur, je commencerais par effectuer l'action (et l'enregistrer dans la base de données distante). Une fois que je confirme qu'il est enregistré dans la base de données, je mue localement dans le magasin. Cela dépend totalement au cas par cas. Mais la bonne chose est que vous pouvez muter de l'intérieur de l'action
En plus de la validation, actions a par défaut des paramètres injectés, à savoir dispatch
, getters
et rootGetters
. Donc, vous pouvez simplement écrire;
sendDataToServer({ commit, getters }, payload)
pour accéder aux accesseurs.