Gemäß der Erläuterung in den Dokumenten :
setState () mutiert nicht sofort this.state, sondern erzeugt einen ausstehenden Statusübergang. Der Zugriff auf this.state nach dem Aufruf dieser Methode kann möglicherweise den vorhandenen Wert zurückgeben.
Es gibt keine Garantie für den synchronen Betrieb von Aufrufen von setState, und Aufrufe können für Leistungsverbesserungen stapelweise verwendet werden.
Also, da setState()
asynchron ist und es keine Garantie für seine synchrone Leistung gibt. Gibt es eine Alternative von setState()
, die syncronous ist.
Zum Beispiel
%Vor% Da der alert
-Wert der vorherige Wert ist, gibt die Alternative alert value:1
mit setState()
an.
Es gibt einige Fragen zu Stackoverflow, die dieser Frage ähnlich sind, aber keine, wo ich die richtige Antwort finden kann.
Wie Sie aus der Dokumentation erfahren haben, gibt es KEINE Synchronisationsalternative. Grund dafür sind Leistungssteigerungen.
Ich nehme jedoch an, dass Sie eine Aktion ausführen möchten, nachdem Sie Ihren Status geändert haben. Sie können dies über:
erreichen
Nein, ist es nicht. React wird den Status aktualisieren, wenn es für richtig erachtet wird, z. B. wenn die Aufrufe von setState
aus Effizienzgründen zusammengefügt werden. Es könnte für Sie interessant sein, dass Sie stattdessen eine Funktion in setState
übergeben können, die den vorherigen Status übernimmt, so dass Sie Ihren neuen Status mit guten Kenntnissen des vorherigen auswählen können.
Ja, es gibt eine Methode, mit der wir unseren synchronen setState erstellen können. Aber seine Leistung ist vielleicht nicht so gut wie normalerweise Zum Beispiel haben wir
%Vor%In diesem Beispiel ändern wir zuerst den Zustand und dann unsere Komponente.
Wenn dies erforderlich ist, würde ich vorschlagen, einen Callback in Ihrer setState-Funktion zu verwenden (und ich empfehle auch, einen funktionalen setState zu verwenden).
Der Rückruf wird aufgerufen, nachdem der Status aktualisiert wurde.
Zum Beispiel wäre Ihr Beispiel
%Vor%gemäß Dokumentation hier: Ссылка
Hinweis: Offizielle Dokumente sagen: "Im Allgemeinen empfehlen wir stattdessen, für diese Logik componentDidUpdate () zu verwenden."
Kurze Antwort auf Ihre Frage ist - NEIN, reagieren hat keine Sync-Methode setState
.
Ich konnte React dazu bringen, setState
synchron aufzurufen, indem ich meinen Code in setTimeout(() => {......this.setState({ ... });....}, 0);
einpackte. Da setTimeout
Zeug am Ende der JavaScript-Ereigniswarteschlange platziert, denke ich, dass React erkennt, dass setState darin enthalten ist, und weiß, dass es sich nicht auf einen gebündelten setState
-Aufruf verlassen kann (der am Ende der Warteschlange hinzugefügt wird). .
Tags und Links javascript reactjs