Maison  >  Article  >  interface Web  >  UseEffect Comment ignorer le rendu initial et déclencher uniquement après tout changement de dépendance

UseEffect Comment ignorer le rendu initial et déclencher uniquement après tout changement de dépendance

DDD
DDDoriginal
2024-10-02 06:34:291129parcourir

UseEffect How To Skip Initial Render And Only Trigger After Any Dependecy Change

J'espère que vous allez bien, je vois que vous êtes un peu frustré par le bit useEffect, mais ne vous inquiétez pas, réparons-le ensemble et résolvons le problème.

Pourquoi Heppen : Mon mec useEffect est vraiment simple : il s'exécute également après le JSX chaque fois qu'une valeur de son tableau de dépendances change. mais parfois useEffect se déclenche même si les données du tableau de dépendances n'ont pas changé. Cela se produit en raison du rendu initial.

Solution : la mienne pourrait être une approche différente de la vôtre. Si je fais une erreur, dites-le-moi et oui, cela fonctionne, alors plongeons-nous

Étape 1 : créer 2 useref dans mon cas son composantA.tsx
Nous utiliserons deux références pour contrôler le comportement de rendu initial :

const skippedInitialRender = useRef(false);
const wasInitialRender = useRef(false);

Étape 2 : créer le useEffect

useEffect(() => {
        if(skippedInitialRender.current) {
            // After the first render, the value changes and this block will run
        }
        const currentTimeout = setTimeout(() => {
            wasInitialRender.current = true;
            skippedInitialRender.current = true;
        }, 200);
        return () => clearTimeout(currentTimeout);
    }, [value])

*Étape 3 : * exécutez votre logique à l'intérieur de l'instruction if et c'est fait

*Explication : * Lors du rendu initial, nous retardons l'exécution en utilisant setTimeout. Cela garantit que peu importe le nombre de déclenchements de useEffect lors des rendus initiaux (2, 4 ou plus), notre logique ne fonctionnera pas. La logique ne s'exécute que lorsque la valeur de dépendance change à nouveau après le rendu initial.

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