Programmez un appel

Gérer les effets secondaires avec useEffect dans React

marconte

marconte

2/04/2025

La gestion des effets secondaires est un aspect crucial du développement d’applications React. Les effets secondaires peuvent inclure des opérations telles que la récupération de données, les abonnements ou la modification manuelle du DOM. React fournit le hook useEffect pour gérer ces effets secondaires dans les composants fonctionnels. Dans cet article, nous allons explorer comment utiliser useEffect efficacement pour gérer les effets secondaires dans vos applications React.

Qu’est-ce que useEffect ?

Le hook useEffect est utilisé pour effectuer des effets secondaires dans les composants fonctionnels. Il accepte deux arguments : une fonction à exécuter après le rendu et un tableau de dépendances facultatif qui détermine quand l’effet doit être réexécuté. Ce hook vous aide à gérer les opérations telles que la récupération de données, les abonnements et la manipulation manuelle du DOM de manière contrôlée.

Utilisation de base de useEffect

L’utilisation la plus simple de useEffect consiste à fournir une fonction qui s’exécute après chaque rendu. Voici un exemple :

import React, { useState, useEffect } from 'react';

function ExempleComposant() {
  const [data, setData] = useState(null);

  useEffect(() => {
    // Récupérer les données lorsque le composant est monté
    fetch('https://api.example.com/data')
      .then((réponse) => réponse.json())
      .then((données) => setData(data));
  }, []); // Un tableau de dépendances vide signifie que cet effet ne s'exécute qu'une seule fois après le rendu initial

  return (
    <div>
      {data ? <pre>{JSON.stringify(data, null, 2)}</pre> : 'Chargement...'}
    </div>
  );
}
JavaScript

Dans cet exemple, le hook useEffect récupère des données à partir d’une API lorsque le composant est monté. Le tableau de dépendances vide ([]) garantit que cet effet ne s’exécute qu’une seule fois, de la même manière que componentDidMount dans les composants de classe.

Dépendances et nettoyage

Le tableau de dépendances dans useEffect vous permet de contrôler quand l’effet doit s’exécuter. Si vous incluez des variables dans le tableau de dépendances, useEffect réexécutera l’effet chaque fois que l’une de ces variables change. Voici un exemple :

import React, { useState, useEffect } from 'react';

function ExempleComposant({ idUser}) {
  const [dataUser, setDataUser] = useState(null);

  useEffect(() => {
    // Récupérer les données de l'utilisateur chaque fois que l'idUser change
    fetch(`https://api.example.com/users/${idUser}`)
      .then((réponse) => réponse.json())
      .then((data) => setDataUser(data));
  }, [idUser]); // L'effet dépend de l'idUser

  return (
    <div>
      {dataUser ? (
        <pre>{JSON.stringify(dataUser, null, 2)}</pre>
      ) : (
        'Chargement...'
      )}
    </div>
  );
}
JavaScript

Dans cet exemple, le hook useEffect récupère les données de l’utilisateur chaque fois que la prop idUser change. L’effet dépend de idUser, il sera donc réexécuté chaque fois que idUser change.

De plus, vous pouvez effectuer un nettoyage en retournant une fonction à partir de la fonction d’effet. Cette fonction de nettoyage sera appelée avant que le composant ne soit démonté ou avant que l’effet ne soit réexécuté. Par exemple :

import React, { useState, useEffect } from 'react';

function ExempleComposant() {
  const [idIntervalle, setIdIntervalle] = useState(null);

  useEffect(() => {
    // Mettre en place un intervalle
    const id = setInterval(() => {
      console.log('Intervalle en cours d\'exécution...');
    }, 1000);

    setIdIntervalle(id);

    // Nettoyer l'intervalle lors du démontage du composant
    return () => clearInterval(id);
  }, []); // Un tableau de dépendances vide signifie que cet effet ne s'exécute qu'une seule fois

  return <div>Vérifiez la console pour les logs d'intervalle.</div>;
}
JavaScript

Dans cet exemple, un intervalle est mis en place lorsque le composant est monté, et il est nettoyé lorsque le composant est démonté en appelant clearInterval.

Pièges courants et bonnes pratiques

Voici quelques pièges courants et bonnes pratiques lors de l’utilisation de useEffect :

  • Dépendances manquantes : Assurez-vous que toutes les variables utilisées à l’intérieur de useEffect sont répertoriées dans le tableau de dépendances. Ne pas le faire peut entraîner des valeurs obsolètes ou des bugs.
  • Fonctions de nettoyage : Incluez toujours des fonctions de nettoyage si vous mettez en place des abonnements ou des intervalles pour éviter les fuites de mémoire.
  • Effets multiples : Utilisez plusieurs hooks useEffect si vous avez différents effets secondaires. Cela maintient votre code modulaire et plus facile à maintenir.
  • Conditions dans les effets : Évitez d’utiliser des conditions directement dans l’effet. Si une condition est nécessaire, structurez votre code pour qu’elle soit basée sur les dépendances, ou utilisez des fonctions séparées pour gérer les différents cas.
  • Optimisation des performances : Utilisez useCallback pour les fonctions que vous passez comme dépendances à useEffect afin d’éviter des réexécutions inutiles.

En suivant ces pratiques, vous pouvez gérer efficacement les effets secondaires dans vos composants React et maintenir votre application performante et sans bugs.

Conclusion

Le hook useEffect est un outil puissant pour gérer les effets secondaires dans les composants fonctionnels React. En comprenant comment l’utiliser correctement, vous pouvez optimiser vos composants, gérer les opérations asynchrones et maintenir une base de code propre et efficace. N’oubliez pas de gérer correctement les dépendances et d’inclure des fonctions de nettoyage lorsque cela est nécessaire pour éviter les pièges courants.