Estoy usando vuex
y vuejs 2
juntos.
Soy nuevo en vuex
, quiero ver un store
cambio variable.
Quiero agregar la watch
funció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_state
en 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
watch
objeto debe coincidir con el nombre de la función en elcomputed
objeto. 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
watch
acció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 elaction
trabajo 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.myState
su 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 sucreated
mé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
mapGetters
como dijo Gabriel. Pero hay un caso en el que no puede hacerlo, pormapGetters
ejemplo, 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
todoById
se actualizará solo sithis.id
se cambiaSi desea la actualización de sus componentes en tal caso, utilice la
this.$store.watch
solución provista por Gong . O maneje su componente conscientemente y actualicethis.id
cuando 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
boolean
propiedad 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
mounted
enlace: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
value
de esa propiedad para cambiarlocalProperty
.¡Espero que ayude!
fuente
Cuando desee ver a nivel estatal, puede hacerlo de esta manera:
fuente
store.state
cambio pordispatch
acció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.state
cambio rara vez se usa, por ejemplo, si tiene un componente o una página que debería realizar alguna acción basada en elstore.state
cambio que no podría manejarse usando mapState calculado solo donde no puede compararnewValue
vsoldValue
store.dispatch
. si quieres manejar elstore.state
cambio parastore' why not handle it inside
store.mutations`?store.dispatch
primero. Por ejemplo, quiero obtener todas las ciudades de un país cada vez que$store.state.country
cambie, 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
vuex
estadomy_state
se reflejarán en la función calculadamyState
y activarán la función de reloj.Si el estado
my_state
tiene datos anidados, entonces lahandler
opció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_state
es 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