Skip to content

useLayoutEffect

用于浏览器重新绘制屏幕之前执行,可以获取到 DOM 信息,并且可以修改 DOM 信息。

案例:记录滚动条位置,等用户返回这个页面时,滚动到之前记录的位置,增强用户体验。

用法

javascript
useLayoutEffect(setup, dependencies);
  • setup:执行的函数。
  • dependencies:依赖项,如果依赖项更新,则重新执行 setup。

返回值:undefined

useLayoutEffect 和 useEffect 的区别

执行时机执行方式DOM 渲染
浏览器完成布局和绘制之前,执行副作用同步执行阻塞 DOM 渲染
浏览器完成布局和绘制之后,执行副作用异步执行不阻塞 DOM 渲染

使用场景

  • 需要同步读取或者更改 DOM:例如读取元素大小或者位置并在渲染前调整。
  • 防止闪烁:在某些情况下,异步的 useEffect 可能会导致可见的布局跳动或者闪烁。
  • 模拟生命周期方法:迁移旧的类组件,并需要模拟 componentDidMountcomponentDidUpdatecomponentWillUnmount 等生命周期方法的同步行为。

useLayoutEffect 示例

Released under the MIT License.