Maison > interface Web > js tutoriel > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-21 05:37:13
original
514 Les gens l'ont consulté

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")
);
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal