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

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-21 05:37:13530parcourir

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

Faire en sorte que le crochet useEffect de React évite l'exécution du rendu initial

La méthode de cycle de vie componentDidUpdate() dans les composants React basés sur les classes est invoquée après chaque rendu, sauf le premier. Pour émuler ce comportement avec le hook useEffect, il peut sembler que le hook s'exécute à chaque rendu, y compris la première fois.

Solution

Pour empêcher useEffect de s'exécuter lors du rendu initial, l'utilisation du hook useRef peut aider à déterminer s'il s'agit de l'invocation initiale de l'effet.

De plus, pour imiter le comportement de composantDidUpdate, qui s'exécute dans la phase « effets de mise en page », envisagez d'utiliser useLayoutEffect au lieu de useEffect.

Exemple

const { useState, useRef, useLayoutEffect } = React;

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

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

    console.log("componentDidUpdateFunction");
  });

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

ReactDOM.render(
  <ComponentDidUpdateFunction />,
  document.getElementById("app")
);

Cette approche utilise le hook useRef pour suivre la première mise à jour et garantir que l'effet ne s'exécute que lors des mises à jour ultérieures, reflétant le comportement de composantDidUpdate dans les applications basées sur les classes. composants.

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