Warum, wenn ich this.setState({count:this.state.count*2})
mache, funktioniert es, aber wenn ich das mache: this.setState({count:this.state.count++})
funktioniert es nicht?
Warum und wie man es repariert?
Vollständiger Code:
%Vor%Aber dieser Code funktioniert:
%Vor%JSFiddle: Ссылка
Indem du this.state.count++
machst, mutierst du den Status, weil es dasselbe ist wie this.state.count += 1
. Sie sollten den Status niemals mutieren (siehe Ссылка ). Bevorzugen Sie stattdessen:
setState
ist eine asynchrone Funktion. Reaction kann eine Menge setState
s zusammen chargen.
Also ist der Wert von this.state.count
der Wert zu dem Zeitpunkt, an dem Sie die Anfrage machen.
Eine bessere Lösung zum Aufruf einer Funktion, die zum Zeitpunkt der Ausführung von setState ausgewertet wird.
%Vor%aus Ссылка
Die Funktion setState
kehrt zurück, bevor this.state.count
inkrementiert wird, weil Sie einen Post-Fix-Operator (++) verwenden. Außerdem ist setState
asynchron, es akzeptiert einen Callback als zweites Argument, das ausgelöst wird, wenn der Status aktualisiert wurde. Sie sollten also Ihre console.log
in den cb einfügen.
Sie versuchen, den Status mutieren (Zugriff this.state.field und erhöhen Sie den Wert) das ist, was ++ ist. Es versucht, diesen Statuswert zu erhöhen und dann einem neuen Status zuzuweisen :) Ändere den Status nur durch Aufruf von setState. Probieren Sie
aus %Vor%oder
%Vor% // neue Zustandsvariable innerhalb des Funktionsumfangs, damit können wir auch sicher spielen. aber rufe niemals diesen Zustand an.
Im Allgemeinen, benutze nicht ++, es ist eine schlechte Übung.
Für einfache Aufgaben
sind besser, oder schreiben Sie sie sogar explizit.
%Vor%Tags und Links reactjs