Autant que je sache et me corrige si je me trompe, redux-thunk est un middleware qui nous aide à répartir les valeurs asynchrones et les valeurs de débogage dans l'action elle-même lorsque je l'utilisais promesse redux Je ne pouvais pas créer de fonctions asynchrones sans implémenter mon propre mécanisme car Action levait une exception consistant à ne distribuer que des objets simples.
Quelles sont les principales différences entre ces deux packages? Y a-t-il des avantages à utiliser les deux packages dans une seule page? Réagir à l'application ou s'en tenir à redux-thunk serait suffisant?
redux-thunk
permet aux créateurs d’action de renvoyer une fonction:
function myAction(payload){
return function(dispatch){
// use dispatch as you please
}
}
redux-promise
leur permet de retourner une promesse:
function myAction(payload){
return new Promise(function(resolve, reject){
resolve(someData); // redux-promise will dispatch someData
});
}
Les deux bibliothèques sont utiles si vous devez envoyer une action de manière asynchrone ou conditionnelle. redux-thunk
vous permet également d’envoyer plusieurs fois au sein d’un même créateur d’action. Que vous choisissiez l’un, l’autre ou les deux dépend entièrement de vos besoins/de votre style.
Vous voudrez probablement/aurez besoin des deux ensemble dans votre application. Commencez par redux-promise pour les tâches asynchrones de routine générant des promesses, puis redimensionnez-vous pour ajouter des thunks (ou des sagas, etc.) à mesure que la complexité augmente :
redux-promise
Améliorera votre vie et la simplifiera rapidement et facilement. (En un mot, au lieu que vous ayez besoin de penser à "défaire" vos promesses quand elles se résolvent, puis à écrire/distribuer les résultats, redux-promise (-middleware) s'occupe de tout ce qui est ennuyeux pour vous.)Dans ces cas, l'avantage de redux-thunk
Est qu'il vous permet d'encapsuler la complexité à l'intérieur de votre créateur d'action .
Mais notez que si votre Thunk produit et envoie des promesses, vous voudrez utiliser les deux bibliothèques ensemble:
redux-promise
Se chargerait alors de déballer chez le (s) réducteur (s) la ou les promesse (s) individuelle (s) générée (s) par votre Thunk, afin d’éviter toute confusion. (Vous pouvez faites plutôt tout en thunks, avec promise.then(unwrapAndDispatchResult).catch(unwrapAndDispatchError)
... mais pourquoi le feriez-vous?)Un autre moyen simple de résumer la différence entre les cas d'utilisation: le début par rapport à la fin du cycle d'action Redux :
redux-promise
Est pour le fin de votre flux, une fois que tout a été ramené à de simples promesses, et que vous voulez juste les décompresser et stocker leur valeur résolue/rejetée dans le magasin. redux-promise-middleware
Est une implémentation plus complète et compréhensible de l'idée qui sous-tend l'original redux-promise
. Il est en développement actif et est également bien complété par redux-promise-reducer
.redux-saga
, qui est très similaire à redux-thunk
, mais qui repose sur la syntaxe des fonctions du générateur. Encore une fois, vous l'utiliserez probablement avec redux-promise
.Divulgation complète: Je suis relativement nouveau dans le développement de Redux et je me suis débattu avec cette question. Je vais paraphraser la réponse la plus succincte que j'ai trouvée:
ReduxPromise renvoie une promesse en tant que charge utile lorsqu'une action est envoyée, puis le middleware ReduxPromise fonctionne pour résoudre cette promesse et transmettre le résultat au réducteur.
De son côté, ReduxThunk oblige le créateur d’action à retarder la distribution de l’objet action aux réducteurs jusqu’à ce que la répartition soit appelée.
Voici un lien vers le tutoriel où j'ai trouvé cette information: https://blog.tighten.co/react-101-part-4-firebase .