Lorsque je console.log la valeur de count
il augmente de 1 même si je l'ai déclaré en utilisant const.
Lorsque vous enregistrez sur la console le count
vous êtes en train d'enregistrer le non actualisé valeur de l'état actuel. En d'autres termes, rien n'a encore changé. Ce n'est qu'à la fin du cycle de rendu, lorsque les mises à jour d'état en file d'attente sont traitées, que le composant effectue un nouveau rendu ( c'est-à-dire qu'il appelle le corps de la fonction ) avec la valeur actualisée de l'état.
Comment se fait-il qu'il soit encore mis à jour ? J'ai l'impression que c'est lié à la useState
mais je n'en suis pas sûr.
Oui, le useState
renvoie la valeur de l'état actuel et une fonction à appeler pour mettre en file d'attente une mise à jour de l'état.
const [count, setCount] = useState(0);
En el increase
le gestionnaire de rappel setCount
est appelée avec la prochaine valeur que vous êtes demandant React pour mettre à jour l'état.
function increase() {
setCount(count + 1);
}
Comme décrit ci-dessus, la mise à jour est mise en file d'attente et, à la fin du cycle de rendu, elle est traitée par React et déclenche le rendu du composant.
Par ailleurs, si nous pouvons mettre à jour en utilisant count + 1
Pourquoi ne pouvons-nous pas le faire ? en utilisant count++
?
Dans React, nous Absolument pas état de mutation. Les count++
s'il pourrait fonctionne et ne provoque pas d'erreur, il s'agit toujours d'une mutation d'état. En essayant d'utiliser count++
est la même chose que d'essayer de faire count = count + 1
ce que nous ne faisons tout simplement pas dans React.
En termes plus généraux de Javascript, essayer de post-incrémenter avec count++
alors que count
est déclarée const
provoquerait une erreur. Lorsqu'une variable est déclarée const
cela signifie seulement qu'il ne peut pas se voir réattribuer une valeur après l'initialisation. Cette ne signifie que la valeur actuellement attribuée est statique/constante. Si nous avions déclaré let [count, setCount] = useState(0)
alors, selon les normes Javascript, faire count++
est parfaitement légale.
Nous utilisons les fonctions de mise à jour de l'état de React pour mettre en file d'attente les mises à jour de l'état et renvoyer généralement nouveau des références à des objets/valeurs.