Heim > Web-Frontend > js-Tutorial > Hauptteil

Reagieren: Wie oft wird eine Bereinigungsfunktion ausgeführt?

Barbara Streisand
Freigeben: 2024-11-01 12:50:46
Original
639 Leute haben es durchsucht

React: How Often Does a Cleanup Function Run?

Reaktionskomponenten mit Zustandsvariablen lösen ein erneutes Rendern aus, wenn diese Variablen aktualisiert werden. Dies wird erwartet und ist eine der Kernfunktionen von React. Darüber hinaus bieten Komponenten eine Bereinigungsfunktion, die jedes Mal ausgelöst wird, wenn die Komponente „ausgehängt“ wird. Aber wie oft wird diese Bereinigungsfunktion tatsächlich ausgeführt?

Nun, wie wir in dieser Demo untersuchen werden, kann die Bereinigungsfunktion mehrere Auslöser haben, aber ein häufiger Auslöser sind Aktualisierungen einer Statusvariablen, wenn sie mit einem Nebeneffekt verknüpft ist.

Kurz gesagt: Wenn Ihre React-Komponente useEffect verwendet und einer bestimmten Statusvariablen folgt, schauen wir uns das folgende Beispiel an:

useEffect(() => {
  console.log("Page mounted");

  return () => {
    // cleanup function
    console.log("Page unmounted");
  };
}, [counter]);
Nach dem Login kopieren
Nach dem Login kopieren

Die Bereinigungsfunktion wird jedes Mal aufgerufen, wenn der Zähler aktualisiert wird.

Wenn eine Zustandsvariable aktualisiert wird, rendert React die Komponente neu, was bedeutet, dass sie zuerst „entfernt“ und dann erneut „gerendert“ werden muss. Während das virtuelle DOM optimiert, welche Knoten aktualisiert werden müssen, wird auf der Logikebene weiterhin die Bereinigungsfunktion aufgerufen.

In den meisten Fällen ist das in Ordnung und wird erwartet. Wenn Ihre Bereinigungsfunktion jedoch beispielsweise Ereignisse meldet, Listener entfernt usw., stellen Sie sicher, dass dies beabsichtigt ist, da die Bereinigungsfunktion basierend auf der Statusvariablen mehrmals aufgerufen wird.

Demo

Sehen wir uns eine Demo an.

  • Öffnen Sie in den Entwicklertools die Konsole.
  • Sie werden zwei Protokolle bemerken:
Child mounted
Page mounted
Nach dem Login kopieren
Nach dem Login kopieren

React: How Often Does a Cleanup Function Run?

Das bedeutet, dass beide Komponenten, Seite und Kind, gerendert wurden.

  • Wenn Sie sich an den oben geteilten Ausschnitt erinnern, ist useEffect an den Zähler gebunden, der beim Klicken auf die erste Schaltfläche erhöht wird. Im Moment sollte dort stehen: Inkrement 0. Lass uns fortfahren und darauf klicken.

  • Behalten Sie die Konsole im Auge und sehen Sie, wie vier Protokolle hinzugefügt wurden:

Child unmounted
Page unmounted
Child mounted
Page mounted
Nach dem Login kopieren

React: How Often Does a Cleanup Function Run?

Der Statusvariablenzähler wurde aktualisiert, und da zwei useEffect-Hooks an den Zähler gebunden sind, bedeutet dies, dass ihre Bereinigungsfunktionen ausgeführt wurden. Beachten Sie, dass useEffect für die Page-Komponente an die Statusvariable gebunden ist, während für die Child-Komponente der Nebeneffekt an eine Prop-Variable gebunden ist, wobei die Quelle immer noch dieselbe Counter-State-Variable ist.

Zusätzlich sehen Sie die Schaltfläche Flag Off, die eine weitere Statusvariable aktualisiert, die nicht mit useEffect verknüpft ist. Das bedeutet, dass Klicks auf diese Schaltfläche die Bereinigungsfunktion nicht auslösen.

Abschluss

Bereinigungsfunktionen werden in React häufig verwendet, insbesondere um Dinge zu melden, sobald die Komponente „fertig“ ist. Seien Sie jedoch vorsichtig, wenn Sie useEffect an eine Zustandsvariable binden. Wie in der Demo zu sehen ist, führt dies dazu, dass die Bereinigungsfunktion jedes Mal aufgerufen wird, wenn die Statusvariable aktualisiert wird, was möglicherweise nicht erwartet wird.

Meistens ist die Bereinigungsfunktion in einem useEffect ohne Statusvariablen untergebracht.

useEffect(() => {
  console.log("Page mounted");

  return () => {
    // cleanup function
    console.log("Page unmounted");
  };
}, [counter]);
Nach dem Login kopieren
Nach dem Login kopieren

Es ist in Ordnung, mehrere useEffect-Hooks in einer Komponente zu haben. In diesem Fall könnten Sie einen haben, der auf eine Zustandsvariable reagiert, und einen anderen, der die Bereinigungsfunktion festlegt.

Child mounted
Page mounted
Nach dem Login kopieren
Nach dem Login kopieren

Um die Frage zu beantworten: Die Bereinigungsfunktion wird aufgerufen, wenn die Komponente ausgehängt wird. Dies kann passieren, wenn der Benutzer zu einem anderen Abschnitt der App navigiert, oder wenn useEffect von einer Statusvariablen abhängt, wird es N-mal aufgerufen, wenn diese Statusvariable aktualisiert wird.

Das obige ist der detaillierte Inhalt vonReagieren: Wie oft wird eine Bereinigungsfunktion ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!