basiert Ich habe eine ähnliche Anweisung wie switch-case
.this.setState wird nicht sofort aktualisiert, wenn setState auf den aktuellen Status
switch (this.state.someState) {
case "string1":
this.setState({
someState: "string5"
});
break;
case "string2":
this.setState({
someState: "string6"
});
break;
case "string3":
this.setState({
someState: "string7"
});
break;
case "string4":
this.setState({
someState: "string8"
});
break;
default:
this.setState({
someState: "string1"
});
break;
}
Das Problem ist, dass es den Status basierend auf dem vorherigen Zustand anstelle des aktuellen Status setzt.
Wie kann ich das beheben?
'setState' ist asynchron. Es ist eher eine Anfrage als eine sofortige Änderung - es kann mit anderen Forderungen nach Effizienz kombiniert werden. Verwenden Sie stattdessen den Rückruf - das erste Argument ist der vorherige Zustand. – Li357
Ich rate Ihnen, Ihren Code neu zu schreiben. 'lassen someState; switch (this.state.someState) { Fall "string1": someState = "string5"; Pause; } this.setState ({someState: someState}); ' – Andrew
Dieser Anwendungsfall ist genau der Grund, warum der Einstellungsstatus asynchron ist. Reagieren führt nachfolgende Aufrufe zu einem Update zusammen. Vielleicht möchten Sie keinen Rückruf, vielleicht möchten Sie 'someState' verwenden, den Sie vorher eingestellt haben? Könnten Sie es zum Beispiel von einer Variablen bekommen? – Sulthan