Fonctionnement et application du hook useEffect dans React

Qu'est-ce que useEffect ?

Le hook useEffect est utilisé pour gérer les effets secondaires au sein des composants React. Il remplcae les fonctions de cycle de vie des composants de classe.

useEffect(() => {
    // Logique d'effet secondaire
    return () => {
        // Fonction de nettoyage
    };
}, [tableauDeDependances]);

Capacités du hook useEffect

  • Phase de montage : Lors de l'exécution du composant, les effets secondaires sont collectés dans une file d'attente. Après le montage complet du composant, ces effets sont exécutés et leurs fonctions de nettoyage sont stockées séparément.
  • Phase de mise à jour : Lors des mises à jour, les effets secondaires sont à nouveau collectés. Avant leur exécution, le hook vérifie si les dépendances spécifiées ont changé. Si oui, l'effet s'exécute et une nouvelle fonction de nettoyage est obtenue ; sinon, il est ignoré.
  • Phase de démontage : Lorsque le composant est sur le point d'être démonté, toutes les fonctions de nettoyage enregistrées sont appelées.

Cas courants de gestion des effets secondaires

Le comportement d'useEffect varie en fonctino du tableau de dépendances :

  • Sans tableau : L'effet s'exécute après chaque rendu et mise à jour du composant.
  • Avec un tableau vide : L'effet ne s'exécute qu'une seule fois, après le montage initial.
  • Avec des dépendances spécifiques : L'effet s'exécute uniquement lorsque l'une des dépendances listées change.

Exemple 1 : Exécuter une action après le montage

useEffect(() => {
    console.log("Action après le montage initial");
    return () => {};
}, []);

Exemple 2 : Exécuter une action après le montage et les mises à jour

useEffect(() => {
    console.log("Action après le montage et chaque mise à jour");
});

Exemple 3 : Simuler componentDidUpdate avec des dépendances

const aDejaMonte = useRef(false);
useEffect(() => {
    if (aDejaMonte.current) {
        console.log("Action lors des mises à jour");
    } else {
        aDejaMonte.current = true;
    }
});

Exemple 4 : Exécuter une action avant le démontage

useEffect(() => {
    return () => {
        console.log("Action avant le démontage du composant");
    };
}, []);

Simulation des méthodes de cycle de vie de classe

Le hook useEffect peut imiter plusieurs méthodes de cycle de vie :

  • Pour componentDidMount, utiliser un tableau de dépendances vide.
  • Pour componentDidUpdate, spécifier les dépendances à surveiller dans le tableau.
  • Pour componentWillUnmount, retourner une fonction de nettoyage avec un tableau vide.

Étiquettes: React useEffect React Hooks effets secondaires Cycle de vie

Publié le 7 juillet à 03h31