Comment déclencher de rappel après la mise à jour de l'état dans Redux?
À Réagir, l'état n'est pas être mis à jour instantanément, de sorte que nous pouvons utiliser le callback dans setState(state, callback)
. Mais comment le faire dans Redux?
Après l'appel de la this.props.dispatch(updateState(key, value))
, j'ai besoin de faire quelque chose avec l'état mis à jour immédiatement.
Est-il possible que je peux appeler un rappel avec le dernier état comme ce que je fais à Réagir?
Utilisez-vous
Je pense que
Je le croyais. Mais j'ai eu l'ancien état. Je n'ai pas utilisé
quelle est votre cas d'utilisation? Vous avez mentionné les appels de l'API?
Redux, l'expédition est synchrone .
thunk
?Je pense que
dispatch()
est une activité synchrone. La mise à jour de l'état devrait être disponible dans la prochaine ligne.Je le croyais. Mais j'ai eu l'ancien état. Je n'ai pas utilisé
thunk
.quelle est votre cas d'utilisation? Vous avez mentionné les appels de l'API?
Redux, l'expédition est synchrone .
OriginalL'auteur Brick Yang | 2016-09-16
Vous devez vous connecter pour publier un commentaire.
composant doit être mis à jour afin de recevoir de nouveaux accessoires.
il existe des moyens pour atteindre votre objectif:
1. componentDidUpdate vérifier si une valeur est modifiée, puis faire quelque chose..
2. redux-promesse ( middleware envoie la valeur résolue de la promesse)
puis en composant
2. redux-thunk
puis en composant
redux-thunk
exemple, vous utilisezdispatch
que si elle est synchrone. Est-ce le cas?n'est pas synchrone. Sans le
Promise.resolve()
,this.props.value
serait toujours revenir à l'ancienne valeur. Une sorte de async report est toujours nécessaire (référencement à partir de l'intérieur d'unsetTimeout
également de travailler par exemple).Je me demandais parce que le updateState fonction dans le redux-thunk exemple a l'expédition(uneaction) suivie immédiatement par retour de Promesse.resolve(). La promesse résout immédiatement, qui, j'imagine, serait de créer une situation de concurrence entre les redux magasin de mise à jour et la .ensuite appelée dans le composant. Parce que l'expédition ne retourne pas une promesse ou d'accepter un rappel, je ne pense pas que c'est un moyen précis pour savoir quand le redux store a été mis à jour. Je pense que la réponse de juste-boris est correcte dans ce cas
Oui je serai d'accord que cette méthode n'est probablement pas une sûre garantie, juste montrer que l'envoi n'est pas synchrone.
OriginalL'auteur Kokovin Vladislav
Le point le plus important à propos de Réagir est un moyen de flux de données. Dans votre exemple, ce qui signifie que l'envoi d'action et de changement d'état de manutention doivent être découplés.
Vous ne devriez pas penser comme "je n'ai
A
, maintenantX
devientY
et je l'ai manipuler", mais "Que dois-je faire lorsqueX
devientY
", sans aucune relation deA
. Stocker l'état peuvent être mis à jour à partir de plusieurs sources, en plus de votre composant, Voyage dans le Temps peut aussi changer d'état et il ne sera pas passé à travers votreA
centre d'expédition.Fondamentalement, cela signifie que vous devez utiliser
componentWillReceiveProps
comme il a été proposé par @MatinJe suis d'accord mais ce qui semble être considéré comme un antipattern: hackernoon.com/...
que faisons-nous maintenant que
componentWillReceiveProps
est obsolète?static getDerivedStateFromProps()
ne semble pas y avoir de remplacement approprié car il ne peut pas appeler un rappel, pour autant que je peux direOriginalL'auteur just-boris
Vous pouvez utiliser
subscribe
l'écouteur, et elle sera appelée lorsqu'une action est distribué. À l'intérieur de l'écouteur, vous obtiendrez la dernière stocker des données.http://redux.js.org/docs/api/Store.html#subscribelistener
subscribe
se déclenche uniquement lorsqu'une action est distribué. Il n'y a aucun moyensubscribe
vous permet de savoir si votre appel d'API a retourné toutes les données.. je pense! 😀Vous pourriez envoyer un autre action lors de votre demande complète (avec succès ou non).
OriginalL'auteur Pranesh Ravi
Vous pouvez utiliser un thunk avec un rappel
OriginalL'auteur acmoune