Développeur buvant dans une tasse devant son écran avec du code affiché

useEffect : Gérez les effets de bord dans vos composants React

Publié le

Le hook useEffect est un outil essentiel dans l’écosystème React. Il permet de gérer les effets de bord comme les appels d'API, les abonnements, ou encore la manipulation manuelle du DOM. Dans cet article, nous allons explorer les bases de useEffect, son utilisation et ses pièges courants.

C'est quoi un effet de bord ?

En programmation, un effet de bord se produit lorsqu'une fonction interagit avec un élément en dehors de sa portée, comme une base de données ou le DOM. Dans React, useEffect permet de gérer ces interactions tout en respectant le cycle de vie des composants fonctionnels.

Qu'est-ce que useEffect ?

useEffect est un hook fourni par React qui permet d'exécuter une fonction après le rendu d'un composant. Il prend deux paramètres :

  • Une fonction de callback : Le code à exécuter (effet).
  • Un tableau de dépendances : Une liste de variables qui déclenche l'effet lorsqu'elles changent.

Avec useEffect, vous pouvez gérer différentes étapes du cycle de vie comme le montage, la mise à jour ou le démontage d'un composant.

Comment utiliser useEffect ?

Voici un exemple simple où useEffect est utilisé pour récupérer des données depuis une API :

import React, { useEffect, useState } from 'react';
    
function UserData() {
    const [data, setData] = useState(null);

    useEffect(() => {
        fetch('https://api.example.com/users/1')
            .then(response => response.json())
            .then(userData => setData(userData))
            .catch(console.error);
    }, []); // Tableau de dépendances vide : l'effet se déclenche uniquement au montage.

    return (
        <div>
            <p>Nom : {data?.name}</p>
        </div>
    );
}

export default UserData;

Dans cet exemple :

  • L'effet (fetch des données) est exécuté après le rendu initial du composant.
  • Le tableau de dépendances vide ([]) indique que l'effet ne sera exécuté qu'une fois (au montage).

Pourquoi utiliser useEffect ?

Voici les principaux avantages de useEffect :

  • Centralisation des effets : Il regroupe toute la logique des effets dans un seul endroit.
  • Compatibilité avec les hooks : Peut être combiné avec d'autres hooks comme useState.
  • Gestion automatique du démontage : Idéal pour nettoyer les abonnements ou les minuteries.

Erreurs courantes avec useEffect

  • Oublier les dépendances : Si vous ne mettez pas à jour correctement le tableau de dépendances, vos effets peuvent être exécutés de manière inattendue ou pas du tout.
  • Appels répétés : Ajouter des dépendances inutiles peut entraîner des re-rendus inutiles.
  • Nettoyage incorrect : Si un effet nécessite un nettoyage (par exemple, un abonnement), utilisez un retour dans useEffect :

    useEffect(() => {
        const subscription = someService.subscribe();
        return () => subscription.unsubscribe(); // Nettoyage
    }, []);

FAQ : Questions fréquentes sur useEffect

Puis-je avoir plusieurs useEffect dans un composant ?

Oui, vous pouvez utiliser plusieurs useEffect pour séparer les différentes logiques d'effet.

Quand utiliser le tableau de dépendances ?

Utilisez-le pour indiquer les variables dont l'effet dépend. Si vous omettez une dépendance, votre effet pourrait fonctionner incorrectement.

Quelle est la différence entre useState et useEffect ?

useState et useEffect remplissent des rôles très différents mais complémentaires :

  • useState : Permet de gérer l' état local d'un composant. Vous l'utilisez lorsque vous avez besoin de stocker ou de mettre à jour des valeurs dynamiques, comme un compteur ou des entrées utilisateur.
  • useEffect : Permet de gérer les effets de bord qui doivent se produire en réaction au rendu ou aux mises à jour, comme appeler une API, modifier le DOM manuellement ou nettoyer un abonnement.

Voici un exemple combinant les deux :

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

function Timer() {
    const [seconds, setSeconds] = useState(0); // Gérer l'état du compteur

    useEffect(() => {
        const interval = setInterval(() => {
            setSeconds(prev => prev + 1); // Mettre à jour l'état chaque seconde
        }, 1000);

        return () => clearInterval(interval); // Nettoyer le timer lors du démontage
    }, []); // L'effet ne s'exécute qu'une fois, au montage

    return (
        <div>
            <p>Temps écoulé : {seconds} secondes</p>
        </div>
    );
}

Dans cet exemple :

  • useState gère l'état dynamique du compteur.
  • useEffect contrôle le timer et nettoie l'effet lorsque le composant est démonté.

Sources

Mots clés

JavaScript

🚀 Maitrisez React et ses Hooks !

Vous voulez mieux comprendre les hooks comme useEffect et développer des composants React performants ? Profitez d'un accompagnement sur mesure pour optimiser vos applications et éviter les pièges courants.

Contactez-moi pour booster vos compétences React
Logo Redux Maîtrisez l'état de vos applications web avec Redux

C'est quoi Redux ? À quoi ça sert ? Apprenez en plus sur le gestionnaire d'état JavaScript. Comment fonctionne-t-il, et quels sont ses véritables avantages ?

Homme montrant un post-it avec sur lequel il est écrit Node.js C'est quoi Node.js ? À quoi ça sert ? Tout ce que vous devez savoir

Découvrez ce qu'est Node.js, à quoi il sert, ses avantages, et comment commencer à l'utiliser pour créer des applications performantes.

écran d'ordinateur affichant du code React React Router : Gérez la navigation dans vos applications React

Découvrez les bases de React Router, la bibliothèques qui vous permettra de gérer la navigation et les routes dans vos applications React.