Maison >interface Web >js tutoriel >Pourquoi mon hook useEffect se déclenche-t-il deux fois sur le montage de composants en mode développement React 18 ?

Pourquoi mon hook useEffect se déclenche-t-il deux fois sur le montage de composants en mode développement React 18 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-30 12:06:13607parcourir

Why is my useEffect Hook Triggering Twice on Component Mount in React 18 Development Mode?

useEffect se déclenche deux fois lors du montage de composants

Problème :

Lors de l'utilisation de useEffect avec un tableau de dépendances contenant uniquement l'état, le la fonction d'effet est invoquée deux fois lors du montage initial dans le développement de React 18 mode.

Explication :

React 18 a introduit une fonctionnalité qui prend en charge le remontage des composants avec le même état, ce qui permet de meilleures performances dès la sortie de la boîte mais nécessite la gestion des composants les effets sont montés et détruits plusieurs fois.

Pour faire apparaître des problèmes potentiels, React démonte et remonte automatiquement chaque composant une fois pendant le mode de développement. Ce remontage déclenche une seconde fois la fonction useEffect.

Solution :

Ce comportement est destiné et conçu pour découvrir les bugs existants dans la logique des effets. L'approche correcte consiste à ajuster la mise en œuvre de l'effet pour gérer correctement plusieurs montages.

Recommandations :

1. Utiliser les fonctions de nettoyage :

Implémentez la fonction de nettoyage useEffect pour arrêter ou annuler les actions de l'effet lorsque le composant est démonté. Cela garantit que l'impact de l'effet sur l'état du composant et les effets secondaires est cohérent entre les modes de production et de développement.

2. Mettre en cache les requêtes HTTP :

Utiliser des techniques de déduplication et de mise en cache des requêtes HTTP pour optimiser les performances et éviter les opérations réseau redondantes. Pensez à utiliser des bibliothèques de récupération de données ou des hooks qui implémentent des mécanismes de cache.

3. Vérifiez votre utilisation de useEffect :

Assurez-vous que useEffect est utilisé de manière appropriée et non pour initialiser l'état de l'application ou effectuer des actions qui ne doivent pas être répétées lors du remontage. Reportez-vous aux principes « Pas un effet » pour obtenir des conseils :

  • Pas un effet : initialiser l'application
  • Pas un effet : acheter un produit

Considérations supplémentaires :

  • Ce comportement se produit uniquement en mode développement. En production, useEffect ne sera appelé qu'une seule fois.
  • Tenter de contourner le comportement de remontage à l'aide de useRef et des instructions if dans useEffect ou supprimer StrictMode est déconseillé.
  • La lecture de la documentation détaillée de React sur useEffect peut fournir des informations supplémentaires sur le sujet.

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!

Déclaration:
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