Haben Sie sich jemals gefragt, wie React-Komponenten aktive Ereignis-Listener aufrechterhalten können, ohne sie bei jedem Rendern neu zu registrieren? Lassen Sie uns dieses Rätsel lösen, indem wir einen häufigen Anwendungsfall untersuchen: das Verfolgen von Mauskoordinaten.
Betrachten Sie diese React-Komponente, die die Mausposition verfolgt:
import React from 'react'; function MouseCoords() { const [mousePosition, setMousePosition] = React.useState({ x: 0, y: 0, }); React.useEffect(() => { function handleMouseMove(event) { setMousePosition({ x: event.clientX, y: event.clientY, }); } window.addEventListener('mousemove', handleMouseMove); }, []); return ( <div className="wrapper"> <p> {mousePosition.x} / {mousePosition.y} </p> </div> ); } export default MouseCoords;
Hier ist der interessante Teil: Das leere Abhängigkeitsarray ([]) bedeutet, dass unser useEffect nur einmal ausgeführt wird, die Komponente jedoch trotzdem aktualisiert wird, wenn wir unsere Maus bewegen. Wie funktioniert das? ?
Um dieses Verhalten zu verstehen, müssen wir erkennen, dass zwei verschiedene Systeme im Spiel sind:
Stellen Sie sich vor, Sie installieren eine Überwachungskamera in Ihrem Zuhause:
Lassen Sie uns Schritt für Schritt untersuchen, was passiert:
React.useEffect(() => { // Effect runs once on mount function handleMouseMove(event) { setMousePosition({ x: event.clientX, y: event.clientY, }); } window.addEventListener('mousemove', handleMouseMove); }, []); // Empty array = run once
Wenn sich die Maus bewegt:
Wir sollten unsere Ereignis-Listener immer bereinigen, wenn die Bereitstellung der Komponente aufgehoben wird. Hier ist der vollständige Code:
React.useEffect(() => { function handleMouseMove(event) { setMousePosition({ x: event.clientX, y: event.clientY, }); } window.addEventListener('mousemove', handleMouseMove); // Cleanup function return () => { window.removeEventListener('mousemove', handleMouseMove); }; }, []);
Hier ist eine praktischere Version mit zusätzlichen Funktionen:
import React from 'react'; function MouseCoords() { const [mousePosition, setMousePosition] = React.useState({ x: 0, y: 0, }); React.useEffect(() => { function handleMouseMove(event) { setMousePosition({ x: event.clientX, y: event.clientY, }); } window.addEventListener('mousemove', handleMouseMove); }, []); return ( <div className="wrapper"> <p> {mousePosition.x} / {mousePosition.y} </p> </div> ); } export default MouseCoords;
Das Verständnis der Beziehung zwischen useEffect von React und Browserereignissen ist für die Erstellung leistungsfähiger React-Anwendungen von entscheidender Bedeutung. Durch die korrekte Nutzung des Ereignissystems des Browsers können wir reaktionsfähige Schnittstellen ohne unnötige erneute Renderings oder Ereignis-Listener-Registrierungen erstellen.
Denken Sie daran: Der Event-Listener ist wie unsere treue Überwachungskamera – installieren Sie ihn einmal und lassen Sie ihn seine Arbeit tun!
Hat Ihnen diese Erklärung geholfen, useEffect- und Event-Listener besser zu verstehen? Hinterlassen Sie unten einen Kommentar mit Ihren Gedanken oder Fragen!
Das obige ist der detaillierte Inhalt vonReacts useEffect- und Event-Listener verstehen: Ein tiefer Einblick. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!