Verwendung des Inkrementoperators in React

9

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: Ссылка

    
Aminadav 04.09.2016, 11:23
quelle

5 Antworten

21

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:

%Vor%     
Anthony Dugois 04.09.2016, 11:44
quelle
3

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 Ссылка

    
William Choy 19.07.2017 16:24
quelle
2

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.

    
Igorsvee 04.09.2016 11:32
quelle
0

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

%Vor%

sind besser, oder schreiben Sie sie sogar explizit.

%Vor%     
Sandeep Ranjan 13.12.2017 12:44
quelle
-1

Ich habe eine Lösung gefunden. Wenn ich this.setState({count:++this.state.count}) mache, funktioniert es.

Der Grund ist, wenn ich this.setState({count:this.state.count++}) mache, wird der neue state.count Wert nicht an die setState React Funktion gesendet.

    
Aminadav 04.09.2016 11:27
quelle

Tags und Links