Disons que j'ai une bascule simple:
Lorsque je clique sur le bouton, le composant Couleur passe du rouge au bleu
Je pourrais obtenir ce résultat en faisant quelque chose comme ça.
index.js
Button: onClick={()=>{dispatch(changeColor())}}
Color: this.props.color ? blue : red
container.js
connect(mapStateToProps)(indexPage)
action_creator.js
function changeColor(){
return {type: 'CHANGE_COLOR'}
}
reducer.js
switch(){
case 'CHANGE_COLOR':
return {color: true}
mais c'est énormément de code à écrire pour quelque chose que j'aurais pu réaliser en 5 secondes avec jQuery, certaines classes et quelques css ...
Donc je suppose que ce que je demande vraiment, c'est ce que je fais de mal ici?
javascript
reactjs
redux
l2 argent
la source
la source
Réponses:
Redux est principalement destiné à «l'état de l'application». Autrement dit, tout ce qui concerne la logique de votre application. La vue construite dessus est le reflet de cet état, mais n'a pas à utiliser exclusivement ce conteneur d'état pour tout ce qu'il fait.
Posez simplement ces questions: cet état est-il important pour le reste de l'application? Les autres parties de l'application se comporteront-elles différemment en fonction de cet état? Dans de nombreux cas mineurs, ce ne sera pas le cas. Prenez un menu déroulant: le fait qu'il soit ouvert ou fermé n'aura probablement aucun effet sur les autres parties de l'application. Donc, le câbler à votre magasin est probablement exagéré. C'est certainement une option valable, mais ne vous rapporte pas vraiment d'avantages. Vous feriez mieux de l'utiliser
this.state
et de l'appeler un jour.Dans votre exemple particulier, la couleur de ce bouton est-elle activée pour faire une différence dans d'autres parties de l'application? S'il s'agit d'une sorte de bascule marche / arrêt globale pour une grande partie de votre application, elle appartient définitivement au magasin. Mais si vous ne faites que basculer une couleur de bouton lorsque vous cliquez sur le bouton, vous pouvez laisser l'état de couleur défini localement. L'action de cliquer sur le bouton peut avoir d'autres effets qui nécessitent une distribution d'action, mais cela est distinct de la simple question de savoir quelle couleur il devrait être.
En général, essayez de garder l'état de votre application aussi petit que possible. Vous n'êtes pas obligé de tout pousser là-dedans. Faites-le quand vous devez ou il est très logique de garder quelque chose là-bas. Ou si cela vous facilite la vie lorsque vous utilisez les outils de développement. Mais ne surchargez pas trop son importance.
la source
FAQ Redux: État d'organisation
Cette partie de la documentation officielle de redux a bien répondu à votre question.
la source
Dans le but de mettre en évidence l'excellent lien fourni par @ AR7, et parce que ce lien a été déplacé il y a quelque temps:
la source
Oui, cela vaut la peine de s'efforcer de stocker tous les états des composants dans Redux . Si vous le faites, vous bénéficierez de nombreuses fonctionnalités de Redux telles que le débogage du voyage dans le temps et les rapports de bogues rejouables. Sinon, ces fonctionnalités pourraient être complètement inutilisables .
Chaque fois que vous ne stockez pas une modification d'état de composant dans Redux, cette modification est complètement perdue de la pile de modifications Redux et l'interface utilisateur de votre application sera désynchronisée avec le magasin. Si cela n'est pas important pour vous, demandez-vous pourquoi utiliser Redux? Votre application sera moins complexe sans elle!
Pour des raisons de performances, vous souhaiterez peut-être vous rabattre sur
this.setState()
tout ce qui enverrait plusieurs actions à plusieurs reprises. Par exemple: le stockage de l'état d'un champ de saisie dans Redux chaque fois que l'utilisateur tape une clé peut entraîner de mauvaises performances. Vous pouvez résoudre ce problème en le traitant comme une transaction: une fois l'action de l'utilisateur "validée", enregistrez l'état final dans Redux.Votre message original mentionne comment la méthode Redux est un «enfer de beaucoup de code à écrire». Oui, mais vous pouvez utiliser des abstractions pour des modèles courants tels que l'état des composants locaux.
la source
this.setState()
oudispatch(action...)
. Il n'est pas nécessaire de l'utiliserthis.setState()
partout, mais lorsque vous en avez besoin, ma suggestion est d'utiliser Redux à la place pour 99% des cas, en recourant authis.setState()
1% en fonction des problèmes de performances.