希望你做得很好,我看到你对 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中文网其他相关文章!