Warum setState verwenden?Im Prozess der React-Entwicklung ist es unvermeidlich, sich mit dem Zustand der Komponenten zu befassen. Jeder, der React verwendet hat, weiß, dass Sie die intern bereitgestellte Methode „setState“ verwenden müssen, wenn Sie den Wert im Status ändern möchten. Warum können wir den Statuswert nicht direkt durch Zuweisung ändern? Lassen Sie uns es analysieren und uns zunächst eine Demo ansehen. Klasse Index erweitert React.Component { dieser.Zustand = { Anzahl: 0 } beim Klicken = () => { dies.setState({ Anzahl: 10 }) } rendern() { zurückkehren ( <div> <span>{this.state.count}</span> <button onClick={this.onClick}>klicken</button> </div> ) } } Dem obigen Code zufolge können Sie sehen, dass sich der Wert von count im state nach dem Klicken auf die Schaltfläche auf 10 ändert. Und aktualisieren Sie die Seitenanzeige. Daher hat die Statusänderung zwei Auswirkungen: die entsprechenden Wertänderungen und **Seitenaktualisierungen. **Um diese beiden Punkte zu erreichen, ist setState in React erforderlich. Angenommen, wir ändern den Inhalt der Methode onClick in
☆Zum Erweitern: In Vue wird die direkte Zuweisung zum Aktualisieren von Daten verwendet und Vue kann auch die neuesten Daten zum Rendern der Seite verwenden. Warum ist das so? In vue2 wird Object.defineProperty() verwendet, um die Get- und Set-Methoden von Daten zu überwachen und Datenänderungen zu überwachen. In vue3 wird ES6-Proxy verwendet, um Datenänderungen zu überwachen. Verwendung von setState Ich glaube, jeder kennt die Verwendung von setState, aber ich möchte es hier trotzdem aufzeichnen: Die setState-Methode hat zwei Parameter: Der erste Parameter kann ein Objekt sein, um den Eigenschaftswert direkt zu ändern, oder es kann eine Funktion sein, die den vorherigen Statuswert abrufen kann. Der zweite Parameter ist eine optionale Rückruffunktion, die den neuesten Statuswert abrufen kann. Die Rückruffunktion wird ausgeführt, nachdem die Komponentenaktualisierung abgeschlossen ist, was der Ausführung während
dies.setState({ Schlüssel: neuer Status })
// prevState ist der vorherige Status, props sind die Eigenschaften, wenn dieses Update angewendet wird this.setState((vorherigerState, Eigenschaften) => { zurückkehren { Schlüssel: prevState.key } }) Asynchrone oder synchrone Updates
Ändern wir zunächst den obigen Code. Wenn setState in der onClick-Methode dreimal hintereinander aufgerufen wird, ist setState, wie oben erwähnt, eine asynchrone Methode. Jeder Aufruf fügt nur die Änderung zur Warteschlange hinzu. Beim synchronen Aufruf wird nur das letzte Update ausgeführt, das Ergebnis ist also 1 statt 3. bei Klick = () => { const { count } = dieser.Zustand this.setState({ Anzahl: Anzahl + 1 }) this.setState({ Anzahl: Anzahl + 1 }) this.setState({ Anzahl: Anzahl + 1 }) } Der obige Code kann als Methode Objekt.zuweisen( Zustand, { Anzahl: Status.Anzahl + 1 }, { Anzahl: Status.Anzahl + 1 }, { Anzahl: Status.Anzahl + 1 } ) Wenn eine Funktion als erster Parameter übergeben und dreimal hintereinander aufgerufen wird, ist das Ergebnis dann dasselbe, als ob sie als Objekt übergeben würde? bei Klick = () => { this.setState((vorherigerState, Eigenschaften) => { zurückkehren { Anzahl: vorherigerZustand.Anzahl + 1 } }) this.setState((vorherigerState, Eigenschaften) => { zurückkehren { Anzahl: vorherigerZustand.Anzahl + 1 } }) this.setState((vorherigerState, Eigenschaften) => { zurückkehren { Anzahl: vorherigerZustand.Anzahl + 1 } }) } Das Ergebnis unterscheidet sich erheblich von der Art der Objektübergabe. Durch die Verwendung der Funktionsmethode kann der Effekt einer Erhöhung um 3 erzielt werden. Warum ist das so? Die aktuellsten Status- und Props-Werte können innerhalb der Funktion abgerufen werden. Aus dem Obigen können wir ersehen, dass setState stapelweise aktualisiert wird. Die Verwendung einer Funktion stellt sicher, dass der aktuelle Status auf dem vorherigen Status basiert, sodass der Effekt der Selbstinkrementierung um 3 erreicht wird. ☆Zusammenfassend: Warum ist die Methode setState asynchron?
**Sind alle setStates asynchron? **Die Antwort ist ja! ! ! Es gibt auch Szenarien, in denen setState in React synchronisiert wird. beim Klicken = () => { this.setState({ Anzahl: this.state.count + 1 }) console.log(dieser.Status) setzeTimeout(() => { this.setState({ Anzahl: this.state.count + 1 }) console.log(dieser.Status) }, 0) } Der obige Code druckt **0, 2. **Warum ist das so? Tatsächlich ist setState in React keine asynchrone Funktion im strengen Sinne. Die Implementierung erfolgt durch eine verzögerte Ausführung der Warteschlange. Verwenden Sie Wir wissen, dass React ☆ Daher ist setState kein synchrones Szenario, wird aber in speziellen Szenarien nicht von React gesteuert ** ZusammenfassensetState ist keine einfache synchrone oder asynchrone Funktion. Der Unterschied zwischen der synchronen und asynchronen Leistung spiegelt sich in den unterschiedlichen Aufrufszenarien wider. Es verhält sich wie eine asynchrone Funktion im Lebenszyklus und bei synthetischen Ereignissen von React. In nicht-synthetischen Ereignissen wie den nativen Ereignissen von DOM erscheinen sie als synchrone Funktionen. Oben finden Sie eine ausführliche Erläuterung des React setState-Datenaktualisierungsmechanismus. Weitere Informationen zum React setState-Datenaktualisierungsmechanismus finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Tutorial zur Installation und Konfiguration von VMware Tools für Ubuntu 18.04
>>>>>SSH-Tutorial zur Installation...
Um die Speicherung und den Zugriff auf Dateien zu...
Inhaltsverzeichnis 1. Optionale Verkettung 2. Nul...
Inhaltsverzeichnis Installationsfreie Version von...
Dieses Axios-Paket wird in der Vue3-Demo verwende...
Erhalten Sie tägliche Statistiken Wenn Sie ein Pr...
Laden Sie zuerst JDK herunter. Hier verwenden wir...
Projektanforderungen: Wenn Sie auf einen Produktb...
1. Installation und Nutzung Installieren Sie es z...
Die Installations- und Konfigurationsmethoden von...
Der endgültige Effekt ist wie folgt: Die Animatio...
Bei der tatsächlichen Entwicklung kann der Primär...
Dieser Artikel beschreibt anhand eines Beispiels,...
Was ist Publizieren/Abonnieren? Lassen Sie mich I...
Bei gleichzeitigen Zugriffen kann es zu nicht wie...