React / 前端 · 2025-12-16 0

React-生命周期与钩子函数的关系详解

补充useLayoutEffect:

3. useLayoutEffect —— 同步副作用

对应阶段:DOM 更新后、浏览器绘制前(同步执行)

应用场景:避免视觉闪烁、布局测量、强制同步 DOM 操作。

  <div class="note">
    <strong>慎用</strong>!仅在 <code>useEffect 无法满足需求时使用,因为它会阻塞渲染。
  

✅ 案例:同步调整滚动位置

function ScrollingList({ items }) {
  const listRef = useRef();

  useLayoutEffect(() => {
    const { scrollHeight } = listRef.current;
    listRef.current.scrollTop = scrollHeight;
  }, [items]);

  return <ul ref={listRef}>{items.map(i => <li key={i}>{i}</li>)}</ul>;
}