useEffect vs useLayoutEffect
执行顺序
useInsertionEffect
在 DOM 插入之前执行useLayoutEffect
在 repaint 之前执行useEffect
在 DOM 操作完成后执行
所以他们的执行顺序如下:
function App() {
useInsertionEffect(() => {
console.log('use insertion effect') # 1
}, [])
useLayoutEffect(() => {
console.log('use layout effect') # 2
}, [])
useEffect(() => {
console.log('use effect') # 3
}, [])
return (
<div id='box' style={{width: 100, height: 100, background: 'blue'}} />
);
}
// Output:
// use insertion effect
// use layout effect
// use effect
useInsertionEffect
因为发生在 DOM 插入前执行,所以即便在dev
环境下(effect通常会被执行两边),它也只会执行一次

Last updated