Maison > interface Web > js tutoriel > Comprendre les useEffect et les écouteurs d'événements de React : une analyse approfondie

Comprendre les useEffect et les écouteurs d'événements de React : une analyse approfondie

Patricia Arquette
Libérer: 2025-01-15 07:34:43
original
834 Les gens l'ont consulté

Understanding React

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.

Le casse-tête

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;
Copier après la connexion
Copier après la connexion

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? ?

Le système d'événements du navigateur par rapport au rendu de React

Pour comprendre ce comportement, nous devons reconnaître que deux systèmes distincts sont en jeu :

  1. Le système d'événements du navigateur : gère les écouteurs d'événements et déclenche les rappels
  2. Système de rendu de React : gère les mises à jour des composants et le rendu de l'interface utilisateur

Pensez-y comme à une caméra de sécurité

Imaginez installer une caméra de sécurité dans votre maison :

  • L'installation (useEffect avec []) se produit une seule fois
  • La caméra (écouteur d'événements) reste active indépendamment
  • Lorsqu'un mouvement se produit, il déclenche l'alarme (mise à jour de l'état)
  • Vous n'avez pas besoin de réinstaller la caméra à chaque fois qu'elle détecte un mouvement !

Briser le flux

Examinons ce qui se passe étape par étape :

1. Configuration initiale (phase de montage)

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
Copier après la connexion

2. Gestion des événements

Quand la souris bouge :

  • Le système d'événements du navigateur détecte un mouvement
  • Appelle notre fonction handleMouseMove enregistrée
  • La fonction met à jour l'état de réaction avec setMousePosition
  • Le composant est restitué avec de nouvelles coordonnées

3. Nettoyage (Important !)

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);
  };
}, []);
Copier après la connexion

Pièges courants à éviter

  1. Nettoyage manquant : supprimez toujours les écouteurs d'événements pour éviter les fuites de mémoire
  2. Dépendances inutiles : n'ajoutez pas de dépendances à moins que l'écouteur d'événement en ait besoin
  3. Réinscription : évitez de mettre les écouteurs d'événements dans le corps de rendu

Exemple concret : suivi de souris amélioré

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;
Copier après la connexion
Copier après la connexion

Points clés à retenir

  1. L'enregistrement de l'écouteur d'événement (useEffect) et la gestion des événements sont des systèmes distincts
  2. Un tableau de dépendances vide ([]) signifie "exécuter une fois lors du montage"
  3. Les événements du navigateur fonctionnent indépendamment du cycle de rendu de React
  4. Toujours nettoyer les auditeurs lors du démontage

Conclusion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal