Heim > Web-Frontend > js-Tutorial > Hauptteil

Warum werden bei der Verwendung von React Hooks und Event Listenern im Statuskonsolenprotokoll falsche Informationen angezeigt?

Barbara Streisand
Freigeben: 2024-10-18 20:13:30
Original
717 Leute haben es durchsucht

When Using React Hooks and Event Listeners, Why Does the State Console Log Display Incorrect Information?

Ereignis-Listener und React-Hooks

Problem:Bei Verwendung von React-Hooks und Ereignis-Listenern zeigt das Statuskonsolenprotokoll falsche Informationen an.

Problembeschreibung

Beachten Sie die bereitgestellte CodeSandbox: https://codesandbox.io/s/lrxw1wr97m. Wenn Sie zweimal auf die Schaltfläche „Karte hinzufügen“ klicken und dann in der ersten Karte auf „Schaltfläche 1“ klicken, zeigt die Konsole den Status mit zwei Karten korrekt an. Wenn Sie jedoch in derselben Karte auf „Button2“ klicken (was von einem Ereignis-Listener verarbeitet wird), zeigt die Konsole fälschlicherweise nur eine Karte im Status an.

Grund für falschen Status

Die Das Problem ergibt sich aus der unterschiedlichen Behandlung von Ereignishandlern in den Komponenten CardsProvider und Card. Die in der CardsProvider-Funktionskomponente definierten Ereignishandler handleCardClick und handleButtonClick werden bei jedem Rendern der Komponente neu definiert. Dies bedeutet, dass sie sich auf den Status zum Zeitpunkt ihrer Definition beziehen, der veraltet sein kann, wenn der Ereignis-Listener ausgelöst wird.

Andererseits verwendet die Card-Komponente useRef, um den Ereignis-Listener zu registrieren, der bestehen bleibt über den gesamten Lebenszyklus der Komponente. Daher bezieht sich die Ereignis-Listener-Funktion auf den Status zum Zeitpunkt der Bereitstellung der Komponente, der veraltet ist.

Lösung – Verwendung der Statusaktualisierungsfunktion

Eine Lösung besteht in der Verwendung eines Statusaktualisierungsprogramms Funktion, die den neuen Status als Argument empfängt, anstatt sich auf den veralteten Status aus dem umschließenden Bereich zu verlassen:

<code class="javascript">const eventListener = () => {
  // Function receives fresh state
  setState(freshState => freshState + 1);
};

// Event listener is registered using `useEffect` to ensure it is only registered once
useEffect(() => {
  // Register event listener
  // ...

  // Unregister event listener on component unmount
  return () => {
    // ...
  };
}, []);</code>
Nach dem Login kopieren

In diesem Szenario empfängt der Ereignis-Listener den neuen Status, wodurch das Problem mit veralteten Daten beseitigt wird. Es ist jedoch wichtig zu beachten, dass die Statusaktualisierungsfunktion denselben Status zurückgeben kann, um unnötige Aktualisierungen zu verhindern. Verwenden Sie console.log innerhalb der Statusaktualisierungsfunktion, um die Statusänderungen zu beobachten.

Andere Lösungen

Alternative Möglichkeiten zur Behebung dieses Problems sind:

  • Mutable Status:UseRef anstelle von useState verwenden.
  • Manuelle Neuregistrierung des Ereignis-Listeners:Neuregistrierung des Ereignis-Listeners bei jeder Statusänderung.
  • Integrierte Ereignisbehandlung:Verwendung der integrierten Ereignisbehandlung von React anstelle von benutzerdefinierten Ereignis-Listenern.

Das obige ist der detaillierte Inhalt vonWarum werden bei der Verwendung von React Hooks und Event Listenern im Statuskonsolenprotokoll falsche Informationen angezeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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