React hat sich zu einer der beliebtesten JavaScript-Bibliotheken zum Erstellen dynamischer Benutzeroberflächen entwickelt. Einer der wichtigsten Hooks in React ist useEffect, der es Entwicklern ermöglicht, Nebenwirkungen in Funktionskomponenten zu verwalten. Zu den Nebenwirkungen gehören Vorgänge wie das Abrufen von Daten, das Einrichten von Abonnements oder das manuelle Bearbeiten des DOM. In diesem Blog werden wir eingehend darauf eingehen, was useEffect ist, wie es funktioniert, und Schritt-für-Schritt-Beispiele zum besseren Verständnis bereitstellen.
In React ist useEffect ein integrierter Hook, mit dem Sie Nebenwirkungen in Funktionskomponenten ausführen können. Nebenwirkungen sind, wie der Name schon sagt, Vorgänge, die sich auf etwas außerhalb der Funktion auswirken, z. B. API-Aufrufe, Timer, Protokollierung oder Aktualisierung des DOM.
Vor der Einführung von Hooks in React 16.8 mussten Sie Klassenkomponenten und Lebenszyklusmethoden wie ComponentDidMount, ComponentDidUpdate und ComponentWillUnmount verwenden, um Nebenwirkungen zu bewältigen. Mit useEffect werden diese Lebenszyklusereignisse nun in einer einzigen Funktion für Funktionskomponenten zusammengefasst.
useEffect ist aus mehreren Gründen ein leistungsstarker Hook für die Verwaltung von Nebenwirkungen in React:
Der useEffect-Hook akzeptiert zwei Argumente:
Hier ist eine Grundstruktur:
useEffect(() => { // Side effect logic goes here return () => { // Optional cleanup function }; }, [/* Dependencies go here */]);
import React, { useState, useEffect } from 'react'; function ExampleComponent() { const [data, setData] = useState(null); useEffect(() => { // Fetching data when the component mounts fetch('https://jsonplaceholder.typicode.com/posts/1') .then((response) => response.json()) .then((json) => setData(json)); // Optional cleanup (in this case, not needed) return () => { // Cleanup logic if necessary }; }, []); // Empty array means this effect will only run once when the component mounts return{data ? data.title : 'Loading...'}; }
In diesem Beispiel werden die Daten von einer API abgerufen, wenn die Komponente zum ersten Mal gerendert wird, und das Ergebnis wird in der Benutzeroberfläche angezeigt. Da wir ein leeres Abhängigkeitsarray übergeben, wird dieser Effekt nur einmal nach dem ersten Rendern ausgeführt.
Durch die Kontrolle, wann useEffect ausgeführt wird, können wir die Leistung optimieren und sicherstellen, dass die Nebenwirkungen zum richtigen Zeitpunkt auftreten.
Nicht alle Effekte erfordern eine Bereinigung. Eine Bereinigung ist nur erforderlich, wenn Sie etwas entfernen oder zurücksetzen müssen, nachdem der Effekt ausgeführt wurde, z. B. das Löschen von Timern oder das Abbestellen von Datenströmen.
Hier ist beispielsweise ein Szenario, in dem keine Bereinigung erforderlich ist:
import React, { useState, useEffect } from 'react'; function NoCleanupEffect() { const [count, setCount] = useState(0); useEffect(() => { console.log('Effect without cleanup runs every time the count changes'); }, [count]); // Runs every time `count` changes return (); }{count}
In diesem Fall wird der Effekt jedes Mal ausgeführt, wenn sich der Zählstatus ändert. Da wir keine Abonnements einrichten oder externe Ressourcen verwalten, ist keine Bereinigung erforderlich.
Wenn Ihr Effekt das Einrichten von Abonnements oder Timern umfasst, müssen Sie wahrscheinlich nach dem Effekt aufräumen. Stellen Sie sich zum Beispiel ein Szenario vor, in dem wir einen Timer einrichten möchten:
import React, { useState, useEffect } from 'react'; function TimerComponent() { const [time, setTime] = useState(0); useEffect(() => { const interval = setInterval(() => { setTime((prevTime) => prevTime 1); }, 1000); // Cleanup function to clear the timer return () => { clearInterval(interval); }; }, []); // Empty dependency array: effect runs once, and cleanup occurs when the component unmounts return{time} seconds have passed; }
Hier ist, was passiert:
Lassen Sie uns einige häufige Szenarien untersuchen, in denen useEffect besonders nützlich ist.
Das Abrufen von Daten beim Mounten der Komponente ist einer der häufigsten Anwendungsfälle für useEffect.
useEffect(() => { fetchData(); async function fetchData() { const response = await fetch('https://api.example.com/data'); const result = await response.json(); setData(result); } }, []); // Empty dependency array means it runs once when the component mounts
Sie können useEffect verwenden, um das DOM nach dem Rendern manuell zu manipulieren. Dies sollte jedoch sparsam erfolgen, da React das DOM effizient verwaltet.
useEffect(() => { document.title = `You clicked ${count} times`; }, [count]); // Updates the document title whenever `count` changes
Wenn Sie Ressourcen wie Abonnements oder Ereignis-Listener haben, die bereinigt werden müssen, können Sie die Rückgabefunktion in useEffect verwenden, um dies zu erledigen.
useEffect(() => { window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, []); // Cleanup listener when the component unmounts
1. Was passiert, wenn ich das Abhängigkeitsarray in useEffect weglasse?
Wenn Sie das Abhängigkeitsarray weglassen, wird useEffect nach jedem Rendern ausgeführt, was zu Leistungsproblemen durch teure Nebeneffekte wie API-Aufrufe führen kann.
2. Kann ich useEffect nur einmal ausführen?
Ja, die Übergabe eines leeren Abhängigkeitsarrays [] stellt sicher, dass der Effekt nur einmal ausgeführt wird, nachdem die Komponente gemountet wurde.
3. Was ist die Bereinigungsfunktion in useEffect?
Die Bereinigungsfunktion ist eine Möglichkeit, den Effekt rückgängig zu machen, wenn die Bereitstellung der Komponente aufgehoben wird oder bevor der Effekt erneut ausgeführt wird. Es ist nützlich zum Bereinigen von Timern, Ereignis-Listenern oder Abonnements.
Zusammenfassend lässt sich sagen, dass useEffect ein leistungsstarker und flexibler Hook ist, der die Verwaltung von Nebenwirkungen in React vereinfacht. Indem Sie steuern, wann Nebenwirkungen auftreten, und bei Bedarf bereinigen, können Sie Ihre Komponenten optimieren und unnötige erneute Renderings oder Speicherverluste vermeiden. Experimentieren Sie mit den obigen Beispielen, um die Kunst des Nebenwirkungsmanagements zu meistern!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3