Estoy usando vuexy vuejs 2juntos.
Soy nuevo en vuex, quiero ver un storecambio variable.
Quiero agregar la watchfunción en mivue component
Esto es lo que tengo hasta ahora:
import Vue from 'vue';
import {
MY_STATE,
} from './../../mutation-types';
export default {
[MY_STATE](state, token) {
state.my_state = token;
},
};
Quiero saber si hay algún cambio en el my_state
¿Cómo miro store.my_stateen mi componente vuejs?
javascript
vue.js
vuejs2
vuex
raffffffff
fuente
fuente

Respuestas:
Digamos, por ejemplo, que tiene una canasta de frutas, y cada vez que agrega o quita una fruta de la canasta, desea (1) mostrar información sobre el recuento de frutas, pero también (2) desea que se le notifique el recuento de las frutas de una manera elegante ...
fruit-count-component.vue
Tenga en cuenta que el nombre de la función en el
watchobjeto debe coincidir con el nombre de la función en elcomputedobjeto. En el ejemplo anterior, el nombre escount.Los valores nuevos y antiguos de una propiedad vigilada se pasarán a la devolución de llamada de vigilancia (la función de conteo) como parámetros.
La tienda de cestas podría verse así:
fruit-basket.js
Puedes leer más en los siguientes recursos:
fuente
watchacción debe dividirse en dos pasos: 1) Primero, verificar si los datos deseados se almacenan en caché y si solo devuelve los datos almacenados en caché; 2) Si el caché falló, necesito una acción asíncrona ajax para obtener los datos, pero este parece ser elactiontrabajo de. Esperando que mi pregunta tenga sentido, ¡gracias!No debe usar los observadores de componentes para escuchar el cambio de estado. Le recomiendo que use funciones getters y luego las asigne dentro de su componente.
En su tienda:
Debería poder escuchar cualquier cambio realizado en su tienda utilizando
this.myStatesu componente.https://vuex.vuejs.org/en/getters.html#the-mapgetters-helper
fuente
Es tan simple como:
fuente
function(n) { console.log(n); }Como se mencionó anteriormente, no es una buena idea ver los cambios directamente en la tienda
Pero en algunos casos muy raros puede ser útil para alguien, por lo que dejaré esta respuesta. Para otros casos, consulte la respuesta de @ gabriel-robert
Puedes hacer esto a través de
state.$watch. Agregue esto en sucreatedmétodo (o donde necesita que se ejecute) en el componenteMás detalles: https://vuex.vuejs.org/api/#watch
fuente
Creo que el autor de la pregunta quiere usar el reloj con Vuex.
fuente
Esto es para todas las personas que no pueden resolver su problema con los captadores y que realmente necesitan un observador, por ejemplo, para hablar con cosas de terceros que no son vue (ver Vue Watchers sobre cuándo usar observadores).
Los observadores y los valores calculados del componente Vue también funcionan en valores calculados. Entonces no es diferente con vuex:
Si solo se trata de combinar el estado local y global, el documento de mapState también proporciona un ejemplo:
fuente
si usas mecanografiado puedes:
fuente
Cree un estado local de su variable de tienda observando y estableciendo cambios de valor. Tal que la variable local cambie para el modelo v de entrada de formulario no muta directamente la variable de tienda .
fuente
La mejor manera de ver los cambios en la tienda es usar
mapGetterscomo dijo Gabriel. Pero hay un caso en el que no puede hacerlo, pormapGettersejemplo, si desea obtener algo de la tienda usando el parámetro:en ese caso no puedes usar
mapGetters. Puedes intentar hacer algo como esto en su lugar:Pero desafortunadamente
todoByIdse actualizará solo sithis.idse cambiaSi desea la actualización de sus componentes en tal caso, utilice la
this.$store.watchsolución provista por Gong . O maneje su componente conscientemente y actualicethis.idcuando necesite actualizartodoById.fuente
Si simplemente quiere ver una propiedad del estado y luego actuar dentro del componente de acuerdo con los cambios de esa propiedad, consulte el siguiente ejemplo.
En
store.js:En este escenario, estoy creando una
booleanpropiedad de estado que voy a cambiar en diferentes lugares de la aplicación de la siguiente manera:Ahora, si necesito ver esa propiedad estatal en algún otro componente y luego cambiar la propiedad local, escribiría lo siguiente en el
mountedenlace:En primer lugar, estoy configurando un observador en la propiedad del estado y luego, en la función de devolución de llamada, uso la
valuede esa propiedad para cambiarlocalProperty.¡Espero que ayude!
fuente
Cuando desee ver a nivel estatal, puede hacerlo de esta manera:
fuente
store.statecambio pordispatchacción de estado desde el componente, ya que este comportamiento solo funciona si usa ese componente. También podría terminar con un bucle infinito. Observe que elstore.statecambio rara vez se usa, por ejemplo, si tiene un componente o una página que debería realizar alguna acción basada en elstore.statecambio que no podría manejarse usando mapState calculado solo donde no puede compararnewValuevsoldValuestore.dispatch. si quieres manejar elstore.statecambio parastore' why not handle it insidestore.mutations`?store.dispatchprimero. Por ejemplo, quiero obtener todas las ciudades de un país cada vez que$store.state.countrycambie, así que agrego esto al observador. Entonces escribiría una llamada ajax: enstore.dispatch('fetchCities')escribo:axios.get('cities',{params:{country: state.country }}).then(response => store.commit('receiveCities',response) )Se puede utilizar una combinación de Vuex acciones , captadores , propiedades calculadas y los observadores para escuchar a los cambios en un valor de estado Vuex.
Código HTML:
Código JavaScript:
Ver demostración de JSFiddle .
fuente
También puede suscribirse a las mutaciones de la tienda:
https://vuex.vuejs.org/api/#subscribe
fuente
Dentro del componente, cree una función calculada
Ahora se puede ver el nombre de la función calculada, como
Los cambios realizados en el
vuexestadomy_statese reflejarán en la función calculadamyStatey activarán la función de reloj.Si el estado
my_statetiene datos anidados, entonces lahandleropción ayudará másEsto observará todos los valores anidados en la tienda
my_state.fuente
También puede usar mapState en su componente vue para dirigir el estado de la tienda.
En su componente:
Donde
my_statees una variable de la tienda.fuente
fuente
Utilicé de esta manera y funciona:
store.js:
mutations.js
actions.js
getters.js
Y en su componente donde usa el estado de la tienda:
Cuando el usuario envíe el formulario, se llamará a la acción STORE , después de crearse correctamente , la mutación CREATE_SUCCESS se confirma después de eso. Gire createSuccess es verdadero, y en el componente, el observador verá que el valor ha cambiado y activará la notificación.
isSuccess debe coincidir con el nombre que declaras en getters.js
fuente