Maison >interface Web >js tutoriel >Comment empêcher useEffect de s'exécuter lors du rendu initial dans React ?

Comment empêcher useEffect de s'exécuter lors du rendu initial dans React ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 20:03:101042parcourir

How to Prevent useEffect from Running on Initial Render in React?

Empêcher le hook useEffect de s'exécuter lors du rendu initial

Dans React, le hook useEffect fournit une fonctionnalité similaire à la méthode de cycle de vie composantDidUpdate. Cependant, contrairement à composantDidUpdate, useEffect s'exécute après chaque rendu, y compris le rendu initial. Cela peut être un comportement indésirable lorsque nous souhaitons que l'effet ne s'exécute qu'après des mises à jour ultérieures.

Pour empêcher useEffect de s'exécuter sur le rendu initial, nous pouvons exploiter deux approches :

Utiliser le hook useRef

Le hook useRef nous permet de stocker une valeur mutable qui persiste entre les rendus. Nous pouvons l'utiliser pour savoir si c'est la première fois que la fonction useEffect est invoquée.

const firstUpdate = useRef(true);
useLayoutEffect(() => {
  if (firstUpdate.current) {
    firstUpdate.current = false;
    return;
  }

  // Run the effect after the initial render
  console.log("useEffect ran after first render");
}, []);

À l'aide du hook useLayoutEffect

Alternativement, nous pouvons utiliser le useLayoutEffect crochet. Contrairement à useEffect, useLayoutEffect s'exécute de manière synchrone après les mises à jour du DOM, ce qui est le même comportement que componentDidUpdate.

useLayoutEffect(() => {
  // Run the effect after the initial render
  console.log("useLayoutEffect ran after first render");
}, []);

Ces approches empêchent efficacement useEffect de s'exécuter sur le rendu initial, garantissant que l'effet ne se produit qu'après mises à jour, tout comme ComponentDidUpdate.

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