欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

React Hooks 原理:链表存储与闭包陷阱

发表于:|最后更新:|分类:前端工程|阅读:2153 次
本文标签:React前端工程Hooks

React Hooks 依赖函数组件每次渲染时按固定顺序调用的特性,其内部通过链表将 Hook 状态与组件 Fiber 节点关联。

一、Hook 链表结构

每个函数组件对应一个 memoizedState 链表,每个节点保存 state、queue 与 next 指针。这也是 Hooks 不能在条件语句中调用的根本原因:顺序错乱会导致状态与 Hook 错位。

二、闭包陷阱

javascript
function Counter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const timer = setInterval(() => {
      console.log(count); // 永远打印初始值 0
    }, 1000);
    return () => clearInterval(timer);
  }, []); // 依赖数组为空,闭包捕获了首次渲染的 count
}

解决方案:将 count 加入依赖数组,或使用 useRef 保存最新值,或改用函数式更新 setCount(c => c + 1)。