一文看懂React Hooks流程,别再被面试官问倒了

2026-10-30 来源: 点击量

一文看懂 React Hooks 流程,别再被面试官问倒了

React Hooks 的底层机制其实不复杂,核心就一句话:React 靠“调用顺序 + 链表”来记住每个 Hook 的状态。

一次渲染里,Hooks 的真实顺序

组件每次渲染都会经历这些阶段:

执行组件函数,按顺序调用 useState、useMemo、useCallback、useRef 等。

React 根据 Hook 调用顺序,从当前组件的 Hook 链表里取出对应状态。

生成新的虚拟 DOM,完成 DOM 更新。

浏览器绘制前,同步执行 useLayoutEffect。一文看懂React Hooks流程,别再被面试官问倒了

浏览器绘制后,异步执行 useEffect。

所以 useEffect 永远晚于组件函数执行,也晚于 useLayoutEffect。

为什么 Hooks 不能写在 if / 循环里

React 内部把每个组件的 Hooks 存在一个链表里,挂载在 Fiber 节点的 memoizedState 上。

首次渲染时,第 1 个 useState 对应链表第 1 个节点,第 2 个 useEffect 对应第 2 个节点。后续每次渲染,React 都会按同样顺序遍历这个链表。

一旦你把 Hook 放进 if、for 或嵌套函数里,调用顺序可能变化,React 就会把状态读错位。这就是“顺序一致”规则的来源。

不同 Hook 在流程里的位置

useState / useReducer:渲染阶段执行,负责读取/计算当前状态。

useMemo / useCallback:渲染阶段执行,依赖不变时复用旧值。

useRef:渲染阶段执行,返回一个跨渲染周期稳定的对象。

useLayoutEffect:DOM 更新后、浏览器绘制前同步执行,适合读取布局。

useEffect:浏览器绘制后异步执行,不阻塞 UI。

useEffect 的依赖数组怎么判断

React 会用 Object.is 逐个比较本次依赖和上次依赖。

不传依赖数组:每次渲染后都执行。

传 []:只在挂载后执行,清理函数在卸载时执行。

传 [a, b]:挂载后执行,之后只有 a 或 b 变化时才执行。

多个 useEffect 按声明顺序执行;清理函数按逆序执行。

面试官常追问的几个点

useEffect 和 useLayoutEffect 的区别:前者异步不阻塞绘制,后者同步会阻塞绘制。

useMemo 和 useCallback 的区别:前者缓存值,后者缓存函数引用。

setState 为什么看起来异步:因为它会把更新放入队列,触发调度后再重新渲染。

为什么 Hooks 只能在函数组件或自定义 Hook 里调用:只有这些场景才有对应的 Fiber 节点和 Hook 链表。

相关文章
  • 一文看懂React Hooks流程,别再被面试官问倒了
    一文看懂React Hooks流程,别再被面试官问倒了

    一文看懂 React Hooks 流程,别再被面试官问倒了React Hooks 的底层机制其实不复杂,核心就一句话:React 靠“调用顺序 + 链表”来记住每个 Hook 的状态。一次渲染里,Hooks 的真实顺序组件每次渲染都会经历这些阶段:执行组件函数,按顺序调用 useState、useMemo、useCallback、...

  • 搞懂Qwik,你的前端之路会顺畅很多
    搞懂Qwik,你的前端之路会顺畅很多

    Qwik 的核心价值在于把前端性能瓶颈从「怎么优化水合」变成了「根本不需要水合」。它不是 React 的替代品,而是针对首屏可交互时间(TTI)这个特定问题的全新解法。Qwik 到底解决了什么传统 SSR 框架(Next.js、Nuxt 等)的流程是:服务端渲染 HTML → 客户端下载 JS → 重新...

  • 【推荐收藏】PWA怎么做全套资源大合集
    【推荐收藏】PWA怎么做全套资源大合集

    推荐收藏】PWA 怎么做全套资源大合集一句话总纲:PWA = HTTPS + manifest.json 应用清单 + Service Worker 服务工作线程三大基石;实现桌面安装、离线可用、推送通知、独立窗口运行;本文包含原理、最简代码、缓存策略、工具链、模板、调试、打包上架、踩坑清单,适合原生 ...

  • 【推荐收藏】性能监控全套资源大合集
    【推荐收藏】性能监控全套资源大合集

    性能监控是个跨层级的话题,我把资源按「基础设施 → 应用/链路 → 前端 → 压测」四层整理成合集,文档和视频都配齐了。 一、基础设施与云原生监控(Prometheus + Grafana)这是目前云原生环境的事实标准组合:Prometheus 负责时序数据采集与 PromQL 查询,Grafana 负责可视...

  • 【亲测好用】前端设计模式的最佳解决方案
    【亲测好用】前端设计模式的最佳解决方案

    【亲测好用】前端设计模式的最佳解决方案前端设计模式不是花里胡哨的八股,而是针对页面、组件、状态、请求、渲染、业务解耦这些高频痛点的成熟套路。没有万能模式,核心原则:优先简单,按需选用;避免过度设计。下面按前端最常用场景,整理亲测落地的方...

  • 进阶Vue3与竞品全维度对比,帮你做出最佳选择
    进阶Vue3与竞品全维度对比,帮你做出最佳选择

    2026年Vue3与竞品全维度对比:按场景选,比按喜好选更靠谱2026年前端框架格局已从"两强争霸"演变为"四极共存"——React仍是市场主流,Vue3完成生态闭环,Svelte站稳编译范式,Solid用信号模型挑战心智负担。 更关键的是,所有框架正在围绕编译时优化 + 细粒度响应式 ...