useEffect Hook ne peut-il s’exécuter qu’une seule fois ?

Dec 08, 2025Laisser un message

En tant que fournisseur d'hameçons de haute qualité, je me suis plongé dans le monde des hameçons, pas seulement dans les hameçons physiques commeCrochets pour panneaux perforésetCrochets à lattes, mais aussi les virtuels dans le framework React - Hooks. Une question qui se pose souvent dans la communauté React est : « Le Hook useEffect peut-il s'exécuter une seule fois ?

Comprendre le crochet useEffect

Avant de répondre à cette question, comprenons d’abord ce qu’est le useEffect Hook. Dans React, le useEffect Hook vous permet d'effectuer des effets secondaires dans les composants de fonction. Les effets secondaires peuvent inclure la récupération de données, les abonnements, les manipulations manuelles du DOM, etc.

La syntaxe de base du useEffect Hook est la suivante :

importer React, { useEffect } from'react' ; function Exemple() { useEffect(() => { // Code d'effet secondaire ici return () => { // Code de nettoyage ici }; }, [/* dépendances */]); return <div>Exemple de composant</div> ; } Exporter l'exemple par défaut ;

Le premier argument de useEffect est une fonction qui contient la logique des effets secondaires. Le deuxième argument est un tableau facultatif de dépendances.

Exécuter useEffect une seule fois

La réponse courte est oui, le useEffect Hook ne peut s’exécuter qu’une seule fois. Pour y parvenir, nous utilisons le deuxième argument du useEffect Hook, qui est un tableau de dépendances. Lorsque ce tableau est vide, le useEffect Hook ne s'exécutera qu'une seule fois, après le rendu initial.

Jetons un coup d'œil à un exemple :

importer React, { useEffect } from'react' ; function OnceOnlyEffect() { useEffect(() => { console.log('Cet effet ne s'exécute qu'une seule fois'); return () => { console.log('La fonction de nettoyage s'exécute lorsque le composant est démonté'); }; }, []); return <div>Composant d'effet une seule fois</div> ; } exporter la valeur par défaut OnceOnlyEffect ;

Dans cet exemple, le tableau vide[]comme le deuxième argument indique à React que cet effet ne dépend d'aucune valeur du composant. Ainsi, React n'exécutera cet effet qu'après le rendu initial, puis à nouveau lorsque le composant sera démonté (pour exécuter la fonction de nettoyage).

L’importance d’exécuter useEffect une fois

Il existe plusieurs scénarios dans lesquels l’exécution du hook useEffect une seule fois est cruciale.

Récupération de données

Lorsque vous devez récupérer des données à partir d'une API lors du montage du composant, vous ne souhaitez généralement le faire qu'une seule fois. Prenons l'exemple suivant de récupération de données utilisateur :

importer React, { useEffect, useState } from'react' ; function UserData() { const [utilisateur, setUser] = useState(null); useEffect(() => { const fetchUser = async () => { const réponse = wait fetch('https://api.example.com/user'); const data = wait réponse.json(); setUser(data); }; fetchUser(); return () => { // Logique de nettoyage, par exemple, annulation de la récupération si possible }; }, []); return ( <div> {user? ( <p>Nom d'utilisateur : {user.name}</p> ) : ( <p>Chargement des données utilisateur...</p> )} </div> ); } exporter les données utilisateur par défaut ;

Dans ce cas, nous souhaitons récupérer les données utilisateur une seule fois lors du montage du composant. Si nous n'utilisons pas de tableau de dépendances vide, l'effet s'exécutera à chaque rendu, ce qui peut conduire à des appels d'API inutiles.

Abonnements

Un autre cas d’utilisation courant est celui des abonnements. Supposons que vous disposiez d'un flux de données en temps réel et que vous souhaitiez vous y abonner lors du montage du composant. Vous ne souhaitez pas vous réabonner à chaque fois que le composant est restitué.

Slatwall Hooks0154_2

importer React, { useEffect } from'react' ; function RealTimeSubscription() { useEffect(() => { const souscription = SubscribeToRealTimeData(); return () => { souscription.unsubscribe(); }; }, []); return <div>Composant d'abonnement en temps réel</div> ; } function SubscribeToRealTimeData() { // Simuler l'abonnement à un flux de données en temps réel return { unsubscribe: () => { console.log('Désabonnement des données en temps réel'); } } ; } exporter l'abonnement RealTime par défaut ;

Ici, l'abonnement n'est configuré qu'une seule fois lors du montage du composant, et la fonction de nettoyage se désabonne lors du démontage du composant.

Erreurs et pièges courants

Bien qu’il soit utile d’exécuter useEffect Hook une seule fois, il existe certaines erreurs courantes à éviter.

Oublier la fonction de nettoyage

Dans certains cas, ne pas fournir de fonction de nettoyage peut entraîner des fuites de mémoire. Par exemple, si vous avez configuré un abonnement ou un intervalle dans l'effet, vous devez le nettoyer lors du démontage du composant.

importer React, { useEffect } from'react' ; function IntervalExample() { useEffect(() => { const intervalId = setInterval(() => { console.log('Ceci s'exécute toutes les secondes'); }, 1000); return () => { clearInterval(intervalId); }; }, []); return <div>Composant d'exemple d'intervalle</div> ; } exporter l'IntervalExample par défaut ;

Si nous n'effaçons pas l'intervalle dans la fonction de nettoyage, l'intervalle continuera à s'exécuter même après le démontage du composant, ce qui peut entraîner des problèmes de performances.

Ajout incorrect de dépendances

L'ajout de dépendances inutiles au tableau peut entraîner l'exécution de l'effet plus de fois que prévu. Assurez-vous de n'inclure que les valeurs dont dépend réellement l'effet.

Conclusion

En conclusion, le useEffect Hook ne peut s’exécuter qu’une seule fois en passant un tableau vide comme deuxième argument. Ceci est utile dans des scénarios tels que la récupération de données et les abonnements. Cependant, il est important de penser à inclure une fonction de nettoyage pour éviter les fuites de mémoire et de faire attention au tableau des dépendances.

En tant que fournisseur de Hooks, nous proposons une large gamme de hooks physiques commeCrochets pour panneaux perforésetCrochets à lattespour vos besoins de supermarché et de stockage. Si vous êtes intéressé par nos produits et souhaitez discuter d'un achat, n'hésitez pas à nous contacter. Nous sommes prêts à vous fournir des crochets de haute qualité et un excellent service.

Références

  • Réagissez à la documentation officielle sur Hooks
  • React - blogs et tutoriels de programmation liés