Est store.dispatch dans Redux synchrone ou asynchrone

104

Je me rends compte que c'est une question fondamentale mais je n'ai pas eu la chance de trouver la réponse ailleurs.

Est-ce store.dispatchsynchrone ou asynchrone Redux?

Dans le cas où il est asynchrone, est-il possible d'ajouter un rappel après que l'action a été propagée comme c'est possible avec React?

ps-aux
la source
Notez que l'état est mis à jour synchrone ( getState()) mais mapStateToPropspas. Il en this.props.valueva de même pour l'ancienne valeur, tandis que getState().valuela nouvelle est la nouvelle - codesandbox.io/s/reactredux-forked-0m5eo?file=/Page.js
Mosh Feu le

Réponses:

89

AFAIK, l'action de répartition est synchrone. Dans le cas où vous êtes prêt à répondre à l'appel asynchrone, vous pouvez utiliser le thunk-middleware dans redux, où la répartition est fournie comme une fonction de rappel que vous pouvez appeler selon votre convenance. Pour plus d'informations, consultez cette réponse sur SO par l'auteur lui-même: Comment envoyer une action Redux avec un délai d'expiration?

agpt
la source
69

Personne ne sait mieux que le code lui-même . =) Comme vous pouvez le voir, dispatchc'est absolument synchrone. Le seul avertissement ici est que le magasin enhancerspeut (et fait) remplacer la dispatchméthode. Par exemple, jetez un œil à applyMiddlewareEnhancer , il vous permet de connecter des middlewares en remplaçant la dispatchméthode par défaut par sa propre implémentation. Bien que je n'ai jamais vu de Redux enhancerqui supprimerait réellement la nature synchrone de dispatch.

fkulikov
la source
1
Vous devez mettre à jour le lien apply middleware vers https://github.com/reduxjs/redux/blob/master/src/applyMiddleware.ts#L19 (en raison de la migration redux de js -> ts, je ne peux pas faire la modification puisqu'il est <6 caractères). Ou peut-être devriez-vous référencer un commit lorsqu'ils utilisaient encore js comme dans votre code itselflien, ce qui serait des liens morts en raison de l'aspect «permalien» des commits.
user7413060