首页  >  文章  >  web前端  >  UseEffect 如何跳过初始渲染并仅在任何依赖项更改后触发

UseEffect 如何跳过初始渲染并仅在任何依赖项更改后触发

DDD
DDD原创
2024-10-02 06:34:291008浏览

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

希望你做得很好,我看到你对 useEffect 位有点沮丧,但别担心,让我们一起修复它并解决问题。

为什么 Heppen :我的兄弟 useEffect 他非常简单:只要依赖数组中的任何值发生变化,它就会在 JSX 之后运行。但有时即使依赖数组中的数据没有改变, useEffect 也会触发。这是由于初始渲染而发生的。

解决方案:我的方法可能与你的不同,如果我犯了任何错误,请告诉我,这可行,所以让我们深入了解

第 1 步: 在我的例子中创建 2 个 userref,其组件A.tsx
我们将使用两个引用来控制初始渲染行为:

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

第 2 步: 创建 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])

*第 3 步:* 在 if 语句中运行逻辑并完成

*说明:*在初始渲染期间,我们使用 setTimeout 延迟执行。这确保了无论 useEffect 在初始渲染期间触发多少次(2、4 或更多),我们的逻辑都不会运行。该逻辑仅在初始渲染后依赖值再次更改时运行。

以上是UseEffect 如何跳过初始渲染并仅在任何依赖项更改后触发的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn