web-dev-qa-db-fra.com

Emettre un événement lorsqu'un élément d'état spécifique change dans le magasin vuex

J'ai un magasin vuex avec l'état suivant:

state: {
    authed: false
    ,id: false
}

Dans un composant, je veux surveiller les modifications de l'état authed et envoyer un appel AJAX au serveur. Cela doit être fait dans divers composants.

J'ai essayé d'utiliser store.watch(), mais cela se déclenche lorsque id ou authed change. J'ai également remarqué que c'est différent de vm.$watch En ce que vous ne pouvez pas spécifier une propriété. Quand j'ai essayé de faire ça:

store.watch('authed',function(newValue,oldValue){
  //some code
});

J'ai eu cette erreur:

[vuex] store.watch only accepts a function.

Toute aide est appréciée!

12
ierdna

Définissez simplement un getter pour l'état authed dans votre composant et regardez ce getter local:

watch: {
  'authed': function () {
    ...
  }
}
24
Primoz Rome

Ou vous pouvez utiliser ...

let suscribe = store.subscribe((mutation, state) => {
  console.log(mutation.type)
  console.log(mutation.payload)
})
// call suscribe() for unsuscribe

https://vuex.vuejs.org/api/#subscribe

12
Emiliano Díaz