插件窝 干货文章 UseEffect 如何跳过初始渲染并仅在任何依赖项更改后触发

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

strong useeffect 渲染 初始 147    来源:    2024-10-19

希望你做得很好,我看到你对 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 或更多),我们的逻辑都不会运行。该逻辑仅在初始渲染后依赖值再次更改时运行。