Devriez-vous jamais utiliser this.setState () lors de l'utilisation de redux?


111

Devriez-vous jamais utiliser this.setState()lors de l'utilisation de redux? Ou devriez-vous toujours envoyer des actions et compter sur des accessoires?


1
Il n'y a rien de mal à avoir certains composants avec l'état.
zerkms

3
Cela dépend complètement de l'endroit où l'État est utilisé. Pensez aux magasins Redux comme étant mondiaux. Tout ce qui n'a pas besoin d'être global peut rester privé pour un composant et ses enfants.
azium

Réponses:


139

Les utilisations claires de setStateseraient pour les composants d'interface utilisateur qui ont un état d'affichage local, mais qui ne sont pas pertinents pour l'application globale. Par exemple, un booléen qui représente si un menu déroulant spécifique est activement affiché n'a pas besoin d'être dans l'état global, il est donc plus commodément contrôlé par l'état du composant de menu.

D'autres exemples peuvent inclure l'état de réduction / expansion des lignes dans un affichage en accordéon d'une hiérarchie. Ou peut-être l'onglet actuellement sélectionné dans la navigation par onglets. Cependant, dans ces deux exemples, vous pouvez toujours choisir de gérer l'état de l'interface utilisateur globalement. Par exemple, cela serait nécessaire si vous vouliez conserver l'état d'expansion / réduction dans le stockage du navigateur afin qu'il soit conservé par l'actualisation de la page.

En pratique, il est généralement plus simple d'implémenter ces éléments d'interface utilisateur avec l'état local et de les refactoriser en état global si nécessaire.


23
Pour continuer avec cela, l'entrée pertinente de la FAQ Redux souligne que l' utilisation de setStateest tout à fait correcte
markerikson

2
Si vous allez transférer ou utiliser le rendu côté serveur, je pense que vous devriez toujours utiliser Redux
neaumusic

Le lien de la FAQ Redux a été mis à jour vers redux.js.org/faq/organizing-state
AnandShanbhag
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.