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

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

DDD
Libérer: 2024-11-24 15:18:11
original
624 Les gens l'ont consulté

How to Prevent the React useEffect Hook from Running on Initial Render?

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

Le hook useEffect est un outil précieux pour gérer les effets secondaires dans les composants React. Cependant, par défaut, il s'exécute après chaque rendu, y compris le rendu initial. Cela peut conduire à un comportement indésirable, comme l'illustre l'exemple de code. Pour surmonter cela, il existe deux stratégies efficaces.

1. Utilisation du hook useRef pour suivre le rendu initial

Le hook useRef nous permet de stocker une valeur mutable qui persiste lors des nouveaux rendus. En tirant parti de cela, nous pouvons savoir si c'est la première fois que la fonction useEffect est exécutée.

Exemple :

const { useState, useRef, useEffect } = React;

function ComponentDidUpdateFunction() {
  const [count, setCount] = useState(0);

  const firstUpdate = useRef(true);
  useEffect(() => {
    // Skip the initial render
    if (firstUpdate.current) {
      firstUpdate.current = false;
      return;
    }

    console.log("useEffect ran");
  });

  return (
    <div>
      <p>useEffect ran: {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click Me</button>
    </div>
  );
}

ReactDOM.render(<ComponentDidUpdateFunction />, document.getElementById("app"));
Copier après la connexion

2. Utilisation du hook useLayoutEffect

Le hook useLayoutEffect est introduit pour simuler le comportement de composantDidUpdate en termes de phase d'exécution. Il s'exécute avant que le navigateur ne soit peint, évitant ainsi tout problème visuel.

Exemple :

const { useState, useLayoutEffect } = React;

function ComponentDidUpdateFunction() {
  const [count, setCount] = useState(0);

  useLayoutEffect(() => {
    console.log("useLayoutEffect ran");
  });

  return (
    <div>
      <p>useLayoutEffect ran: {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click Me</button>
    </div>
  );
}

ReactDOM.render(<ComponentDidUpdateFunction />, document.getElementById("app"));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal