-1
votes

Pourquoi les variables d'état sont-elles déclarées avec un const en usestate?

dans la documentation officielle de réagir 16 de usestate () Code> Crochet, le Nombre code> L'état et sa fonction Setter sont déclarés comme suit:

const [count, setCount] = useState(0);


1 commentaires

Je suppose que parce que cela ne devrait pas être changé dans votre code. Vous pouvez seulement changer le nombre d'appeler setCount


3 Réponses :


3
votes

Dans réagir, vous ne méritez pas directement la variable d'état.

Composants de classe, vous ne feriez jamais this.state.property = 'nouvelle valeur' ​​ mais utilisez this.setstate ({Propriété: "Nouvelle valeur"}) Fournir une nouvelle référence.

même avec des crochets. Vous ne mutez pas la valeur de l'état directement, comme comptent = 2 , mais devez utiliser setCount (2) pour laisser réagir savoir que l'état a été changé (et réagit peut servir de la mise à jour de l'état aussi).

Si vous souhaitez creuser plus profondément, consultez le Documentation de rapprochement officiel sur pourquoi Réagir fonctionne de cette façon. (Astuce: optimisation).


0 commentaires

0
votes

avec

const [compte, setCount] = usestate (0);

Vous avez une copie de la variable d'état, et la copie ne changera pas même si vous appelez setCount


0 commentaires

-1
votes

Ce n'est pas réellement sur réagir, mais flux. Flux est un paradigme qui implique des magasins d'états immuables, avec des actions appliquées à un état pour le transformer en une nouvelle instance d'état immuable.


8 commentaires

Pas le Downvoter, mais votre réponse ne concerne pas la question de l'OP.


Ils demandent pourquoi ils ne peuvent pas modifier la valeur d'une variable immuable à l'aide d'un cadre / une bibliothèque particuliers. Le cadre / la bibliothèque (réagir) n'est en réalité pas la question, c'est le paradigme de gestion de l'État sous-jacent utilisé par une extension de cadre / bibliothèque (Redux). Les autres réponses ne répondent pas à cela et confondent la bibliothèque de manipulation DOM (REACT) avec la bibliothèque de gestion d'Etat (Redux). Alors oui, je m'adresse à la question de l'OPS et à faire au cœur de la question beaucoup plus que les autres réponses.


C'est sans importance pour le cadre, OP est de demander à propos de const .


«... Pourquoi utilisent-ils Const pour une variable d'état, dont la valeur peut être modifiée» lors de l'utilisation de Flux, l'état est immuable, vous pouvez donc utiliser le const en toute sécurité. Cela répond directement à la question et la réponse concerne le paradigme de gestion de l'État. Toute altération de l'État serait alors prise au cours du développement (en supposant d'être utilisée stricte) et serait une erreur de développeur lors de l'utilisation de Flux.


C'est strictement une convention, op pourrait utiliser laisser et même réaffecter compter ou setCount sans aucun effet secondaire avec l'état immuable. Ce serait une odeur horrible du code, mais cela fonctionnerait. OP venait juste de confondre avec immutabilité, const et scoping, que votre réponse ne s'adresse pas.


Il s'agit d'un malentendu clair de la manière dont le paradigme de gestion de l'État sous-jacent (Flux) fonctionne et tente de répondre à cette question comme s'il est spécifique à la réaction, l'ajout d'une couche d'abstraction inutile, semblable à répondre à une question de Vanilla JS utilisant des extensions JQuery. L'OP ne savait pas que Flux était ce qu'ils interrogatifs, mais c'était. Il est une bonne pratique de déclarer des constantes sémantiques à l'aide de const , car comme vous reconnaissez implicitement, nous traitons une constante, car nous traitons avec le flux -nothing à faire avec réagir autre que réagir des projets que de réagir ont tendance à utiliser REDUX.


Je ne pense pas que Flux est pertinent ici, même réagir ne mentionne pas Flux dans leur documentation. Bien que le contenu de votre réponse ne soit pas intrinsèquement faux, c'est déroutant inutilement et un peu hors piste. OP consiste à utiliser de simples crochets de réaction qui ne sont ni flux ni redux, bien que similaires dans leur flux unidirectionnel immuable. Op pourrait demander pourquoi nous utilisons const in const num = math.random () et la réponse serait la même, bien que probabiliste Différent chaque fois, il ne changera jamais dans la portée de la fonction.


Je suis tout à fait d'accord que c'est sans rapport de réagir, c'est juste le contexte qui a incité OP à interroger pourquoi quelque chose qui changera a été déclaré comme un const .