Gibt es eine synchrone Alternative von setState () in Reactjs

9

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.

    
shubham agrawal 03.02.2017, 06:49
quelle

6 Antworten

19

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

%Vor% %Vor%
    
ospfranco 03.02.2017, 07:22
quelle
2

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.

    
Jemar Jones 03.02.2017 06:56
quelle
1

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.

    
Pulkit Aggarwal 14.12.2017 05:48
quelle
0

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."

    
S.Kiers 12.09.2017 03:46
quelle
0

Kurze Antwort auf Ihre Frage ist - NEIN, reagieren hat keine Sync-Methode setState .

    
Vladimir Kovpak 03.02.2017 06:58
quelle
-1

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). .

    
Dustin Kane 11.09.2017 21:53
quelle

Tags und Links