¿Hay alguna manera de que un envío/acción llame a un getter dentro de él?
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; } }Entonces, ¿cuál es la mejor práctica aquí? ¿Usar la mutación para cambiar el estado y luego obtener el estado y pasarlo a la acción que luego ejecutará la función asíncrona o necesito reestructurar mi implementación?
llamar a la mutación -> obtener los datos a través de getter -> llamar a la acción
O
¿Hacerlo todo en la acción (mutar en la acción y hacer el método de acción/asincrónico sin la necesidad del captador)?
Además de la confirmación, las acciones tienen parámetros inyectados predeterminados que son dispatch , getters y rootGetters . Así que simplemente puedes escribir;
sendDataToServer({ commit, getters }, payload) para acceder a los captadores.
Tienes acceso a getters dentro de una acción:
getters: { getUser(state){ return state.user } } actions : { myAction({ getters }){ let user = getters.getUser } }En la acción, verá que el primer parámetro tiene {commit} . Del mismo modo, puede pasar {commit, state} . De esta manera, puede acceder directamente a state.data.
Creo que en su ejemplo, le gustaría realizar la acción porque puede llamar a la mutación desde dentro de la acción misma usando commit('setData') .
El primer parámetro está ahí para que uses el estado y la mutación como prefieras. Personalmente, solo he trabajado en proyectos en los que primero realizas la acción y haces una mutación para almacenarla en la aplicación. Por ejemplo, si quiero almacenar la información de un automóvil en el servidor en algún lugar, primero haría la acción (y la guardaría en una base de datos remota). Una vez que confirme que se guardó en db, mutaría localmente en la tienda. Esto depende totalmente de cada caso. Pero lo bueno es que puedes mutar desde dentro de la acción.