Heim > Web-Frontend > js-Tutorial > Warum wird mein Reaktionsstatus nicht innerhalb von „setInterval' aktualisiert?

Warum wird mein Reaktionsstatus nicht innerhalb von „setInterval' aktualisiert?

Mary-Kate Olsen
Freigeben: 2024-12-02 19:43:11
Original
1004 Leute haben es durchsucht

Why Doesn't My React State Update Inside `setInterval`?

Status wird bei Verwendung des React State Hook innerhalb von setInterval nicht aktualisiert

Innerhalb der neuen Hooks-Funktion von React ist die Clock-Komponente so konzipiert, dass sie einen Zeitwert anzeigt das erhöht sich jede Sekunde. Trotz der Funktion des Timers stagniert der Zeitwert bei eins.

Die Ursache des Problems

Die Wurzel dieses Problems liegt in der Schließung von setInterval. Die Callback-Funktion innerhalb dieses Abschlusses hat nur Zugriff auf den Anfangswert der Zeitvariablen. Da die Funktion useEffect() nach dem ersten Rendern nicht ausgeführt wird, erhält der Rückruf keine nachfolgenden Zeitwerte.

Zeitwertzugriff

Folglich ist die Zeitvariable immer trägt den Anfangswert Null im Callback für setInterval.

Lösung: Verwendung der Callback-Form des Zustands Hooks

Ähnlich wie die herkömmliche setState-Methode bieten State-Hooks zwei Optionen: Die erste akzeptiert einen aktualisierten Status, während das Callback-Formular den aktuellen Status empfängt. Um dieses Problem zu beheben, wird empfohlen, das Rückrufformular zu verwenden und den neuesten Statuswert abzurufen, bevor er innerhalb des setState-Rückrufs inkrementiert wird.

Alternative Ansätze

Blogbeitrag von Dan Abramov befasst sich intensiv mit der Verwendung von setInterval mit Hooks und stellt verschiedene Lösungen für dieses Problem vor. Es wird dringend empfohlen, es zu lesen.

Aktualisierter Code

Der folgende Code zeigt die korrigierte Implementierung:

function Clock() {
  const [time, setTime] = React.useState(0);
  React.useEffect(() => {
    const timer = window.setInterval(() => {
      setTime(prevTime => prevTime + 1); // <-- Change this line!
    }, 1000);
    return () => {
      window.clearInterval(timer);
    };
  }, []);

  return (<div>Seconds: {time}</div>);
}

ReactDOM.render(<Clock />, document.querySelector('#app'));
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird mein Reaktionsstatus nicht innerhalb von „setInterval' aktualisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage