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