Vous êtes-vous déjà demandé comment les composants React peuvent maintenir des écouteurs d'événements actifs sans les réenregistrer à chaque rendu ? Découvrons ce mystère en examinant un cas d'utilisation courant : le suivi des coordonnées de la souris.
Considérez ce composant React qui suit la position de la souris :
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;
Voici la partie intéressante : le tableau de dépendances vide ([]) signifie que notre useEffect ne s'exécute qu'une seule fois, mais le composant se met toujours à jour lorsque nous déplaçons notre souris. Comment cela marche-t-il? ?
Pour comprendre ce comportement, nous devons reconnaître que deux systèmes distincts sont en jeu :
Imaginez installer une caméra de sécurité dans votre maison :
Examinons ce qui se passe étape par étape :
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
Quand la souris bouge :
Nous devons toujours nettoyer nos écouteurs d'événements lorsque le composant se démonte. Voici le code complet :
React.useEffect(() => { function handleMouseMove(event) { setMousePosition({ x: event.clientX, y: event.clientY, }); } window.addEventListener('mousemove', handleMouseMove); // Cleanup function return () => { window.removeEventListener('mousemove', handleMouseMove); }; }, []);
Voici une version plus pratique avec des fonctionnalités supplémentaires :
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;
Comprendre la relation entre useEffect de React et les événements du navigateur est crucial pour créer des applications React performantes. En exploitant correctement le système d'événements du navigateur, nous pouvons créer des interfaces réactives sans nouveaux rendus inutiles ni inscriptions d'écouteurs d'événements.
N'oubliez pas : l'écouteur d'événements est comme notre fidèle caméra de sécurité : installez-le une fois et laissez-le faire son travail !
Cette explication vous a-t-elle aidé à mieux comprendre useEffect et les écouteurs d'événements ? Laissez un commentaire ci-dessous avec vos réflexions ou vos questions !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!