redux-promesse avec Axios, et comment traiter avec des erreurs?
Donc, je vois une erreur, redux-promesse mains me ramène à l'erreur: c'est vrai, avec la charge utile, mais c'est une fois qu'il frappe le réducteur... pour moi, le découplage de la demande ET à la condition d'erreur est un peu bizarre, et semble inappropriée. Ce qui est un moyen efficace de faire face avec la condition d'erreur lors de l'utilisation d'axios w/reduc-la promesse (middleware).. voici l'essentiel de ce que j'ai..
in action/
const request = axios(SOME_URL);
return {
type: GET_ME_STUFF,
payload: request
}
in reducer/
const startState = {
whatever: [],
error: false
}
case GET_ME_STUFF:
return {...state, startState, {stuff:action.payload.data, error: action.error? true : false}}
etc... ensuite, je peux faire face à l'erreur.. donc, mon appel api est maintenant divisé en deux séparés des zones et qui semble mauvais.... il doit y avoir quelque chose qui me manque ici. Je pense que dans la /les actions que je peux passer dans un rappel qui gère une nouvelle action etc.. ou quelque chose, mais pas de le découper.
OriginalL'auteur james emanon | 2016-02-16
Vous devez vous connecter pour publier un commentaire.
J'ai dû passer à travers une situation similaire. Le défi est que vous n'aurez probablement pas être en mesure d'évaluer les résultats de la promesse jusqu'à ce qu'il est au réducteur. Vous pourrait gérer vos exceptions il y en a mais c'est pas le meilleur modèle. De ce que j'ai lu les réducteurs sont destinés uniquement pour retourner pièces appropriées de l'état fondée sur l'action.type et ne rien faire d'autre.
Entrez un middleware, redux-thunk. Au lieu de retourner un objet, il retourne une fonction, et il peut coexister avec la promesse.
C'est expliqué assez bien à http://danmaz74.me/2015/08/19/from-flux-to-redux-async-actions-the-easy-way/ [archivé ici]. Essentiellement, vous pouvez évaluer la promesse d'ici et d'envoi par l'autre action créateurs avant que la promesse les résultats de la réducteurs.
Dans vos actions de fichiers, d'ajouter des mesures supplémentaires créateurs qui permettrait de gérer le succès et l'erreur (et tous les autres).
C'est à peu près à ce que vous pouvez traduire votre pseudo pour ce qui est expliqué dans le lien. Elle traite de l'évaluation de la promesse directement dans votre action de créateur et de tirer les actions appropriées et les charges de votre réducteurs qui suit la convention de l'action -> réducteur ->- > mise à jour des composants cycle. Je suis encore assez nouveau pour Réagir/Redux moi-même, mais j'espère que cette aide.
J'ai ajouté un lien vers la Wayback Machine archive.
OriginalL'auteur Victor
La accepté de répondre à ne pas faire usage de redux-promesse. Depuis que la question est en fait sur la gestion des erreurs à l'aide de redux-promesse-je fournir une autre réponse.
Dans le réducteur de vérifier l'existence de l'attribut d'erreur sur l'action de l'objet:
Et de modifier le type de l'action, le déclenchement d'un changement d'état d'une erreur de manipulation de composants que vous avez mis en place pour cela.
Vous pouvez lire un peu plus sur le sujet ici sur github.
Ouais, vous avez un point. Je suis maintenant à l'aide de redux-promesse-de middleware qui gère les erreurs bien.
Vous avez raison, le redux-promesse-de middleware semble être beaucoup mieux pour la gestion des erreurs. Merci pour le pointeur!
C'est une très mauvaise idée de mettre cela en dehors de votre instruction switch. Que faire si une autre action a une erreur? Il serait également provoquer ce cas (et d'autres que vous mis en œuvre de même) à exécuter.
OriginalL'auteur pors
Il ressemble, vous pouvez intercepter l'erreur où vous faites l'envoi, puis de faire une erreur séparée d'expédition si cela arrive. C'est un peu un hack, mais il fonctionne.
et dans le réducteur
OriginalL'auteur bruce
Toujours à l'aide de redux-des promesses que vous pouvez faire quelque chose comme ce qui, je pense, est une manière élégante de faire face à ce problème.
Tout d'abord, définir une propriété dans le redux etat qui va tenir toute ajax erreurs pouvant s'est produite.
Deuxième, l'installation d'un réducteur de gérer ajax erreurs:
Enfin, créer un très simple réagir composant qui va rendre les erreurs si il y a de tout (je suis l'aide de la réaction-s-alerte de la bibliothèque de salon de nice alertes):
Vous pouvez inclure cette composante dans votre Application composant.
OriginalL'auteur juank11memphis
Cela pourrait ne pas être la meilleure approche, mais cela fonctionne pour moi. Je vous passe le " il " de mon composant var contexte. Alors quand je reçois la réponse de retour je viens d'exécuter les méthodes définies dans mes composants contexte. Dans mon composant, j'ai successHdl et errorHdl. À partir de là, je peux déclencher plus de redux actions que la normale. J'ai vérifié toutes les réponses précédentes et semble trop ardue pour une telle tâche triviale.
OriginalL'auteur Roberto Aguilar
Ne pas utiliser redux-promesse. Il overcomplicates quelque chose qui est en fait super simple à faire vous-même.
Au lieu de lire le redux docs: http://redux.js.org/docs/advanced/AsyncActions.html
Il vous donnera une bien meilleure compréhension de la façon de traiter ce genre d'interactions, et vous allez apprendre à écrire quelque chose (mieux que) redux-promesse de vous-même.
C'est des conseils et je l'ai donné pour une bonne raison. La accepté de répondre à ne pas utiliser redux-promesse de soit.Je devrais probablement avoir ajouté un commentaire à la question au lieu d'une réponse. C'est vrai
OriginalL'auteur SpoBo