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 à jour
simultanément fort>. Si vous appelez le gestionnaire d'un prometteur code> ou un
Settimeout 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>