如何防止 useEffect Hook 在初始渲染时运行
React 文档指出,在渲染过程中不会调用 componentDidUpdate() 生命周期方法初始渲染。但是,当使用 useEffect 钩子模拟 componentDidUpdate() 时,它似乎在每个渲染上运行,包括第一个渲染。
说明
useEffect 钩子在之后运行每个渲染周期,包括第一个渲染周期。与 componentDidUpdate() 方法不同,它没有内置检查来跳过第一次运行。
解决方案
有两种方法可以解决此问题:
1。使用useRef
我们可以使用useRef钩子来跟踪useEffect函数是否是第一次被调用。
const isFirstRender = useRef(true); useEffect(() => { if (isFirstRender.current) { isFirstRender.current = false; return; // Skip the first render } console.log("Component did update"); }, [<dependencies>]);
2.使用 useLayoutEffect
useLayoutEffect 与 useEffect 类似,但它与 componentDidUpdate() 运行在同一阶段,发生在 DOM 操作之后。
useLayoutEffect(() => { console.log("Component did update"); }, [<dependencies>]);
以上是为什么 useEffect 在 React 中的初始渲染上运行?的详细内容。更多信息请关注PHP中文网其他相关文章!