Alors je me demandais ce qui arrive réellement lorsque je change plus d'un état dans une fonction de gestionnaire. Tous deux seront-ils mis à jour aussi si un état dépend des autres? < / p> ou quoi si p>
3 Réponses :
Définition d'un état est aussi asynchrone dans la nature SO -
const [x, setX] = useState(0)
const [y, setY] = useState(x) // this is just to initialize an initial value to your state y so it will be once set to the value of x and then it doesn't depends on x//
const handlerFunction = () => {
setX(x+1)
setY(y+1)
}
Rien ne fonctionne jamais simultanément dans JavaScript *, de sorte que les mises à jour de l'état se produisent l'une après l'autre. Mais comme ils sont tous deux faits de manière asynchrone, vous ne verrez pas Dans les trois cas ci-dessus, les valeurs finales de Notez également que parce que Tout ce que vous êtes au courant, c'est une bonne pratique d'utiliser Mises à jour fonctionnelles Lorsque votre état change sur l'état précédent: p> Ceci garantit que chaque mise à jour est un Opération atomique . P> * Sauf si vous n'êtes pas faire face à threads de travailleur sub> p> p> X code> ou y code> jusqu'à ce que le prochain rendu, il apparaisse donc simultanément de votre perspective. x code> et y code> après appel handlerfunction () code> une fois 1 et 1. p> x code> et y code> sont simplement des variables, leurs valeurs ne peuvent pas changer de manière synchrone de toute façon, c'est pourquoi vous ne voyez que Leur mise à jour des valeurs dans le prochain rendu. P>
https://github.com/facebook/react/issues/14259
Réagir des mises à jour de l'état des lots s'ils sont déclenchés à partir d'un événement basé sur REACT P> blockQuote>
Donc, si vous appelez le gestionnaire d'un
onclick code>,onchange code>,Onblur code> ... réact appliquera les multiples mises à joursimultanément fort>. Si vous appelez le gestionnaire d'un prometteur code> ou unSettimeout code>, les mises à jour seront appelées séparément forts>. P>Si un état La variable dépend d'un autre, je suggère de les regrouper dans un objet comme ci-dessous: p>
xxx pré> p>