Skip to content
目录

常见问题

本页为速查 + 指向专题文档。原理与流程勿在此重复大段源码,请读对应章节。


1. 基础

问题简要回答延伸
React 是什么?用于 UI 的库:声明式、组件化、跨平台01-核心架构概述
Virtual DOM?轻量描述树,协调后更新真实 UI;便于 diff 与跨平台同上
渲染分几阶段?Render(可中断)→ Commit(不可中断)→ Passive 副作用06-并发

2. Fiber

问题简要回答延伸
Fiber 是什么?工作单元:链表树节点 + 可中断 render 架构02-Fiber架构详解
核心字段?child/sibling/return 树链、memoizedState/Propsflagslanesalternate02、源码 ReactFiber.js
双缓冲?current 与 workInProgress 两棵树,alternate 互指,减少分配02 §3

3. Reconciliation

问题简要回答延伸
Diff 假设?不同类型换子树;同级用 key 复用03-Reconciliation
为何只比同层?跨层 O(n³);实际 UI 很少跨层移动节点03
key 作用?稳定标识列表项,避免错误复用 DOM见下 §10 表格

4. Hooks

问题简要回答延伸
Hooks 是什么?16.8+ 在函数组件用 state/副作用等;存于 Fiber 链表04-Hooks
为何顺序调用?按调用顺序对齐链表槽位;19 的 use 可条件调用04 §4
useState 原理?mount 建 Hook+队列;setState 入队;update 时 reducer 合并04 §5
useEffect 时机?Render 只登记;Commit 后 Passive 异步执行04 §6
useMemo vs useCallback?缓存 vs 缓存函数引用04 §7

5. 性能

策略说明
Fiber + Lanes + Scheduler可中断、按优先级调度
memo / useMemo / useCallback减少重渲染与重计算
lazy + Suspense代码分割
自动批处理18+ 多 setState 常合并一次渲染

6. 并发(18+)

问题简要回答延伸
并发渲染?同线程可打断 render,非多线程06
useTransition?非紧急更新走 TransitionLanes06 §6、04 §9
useDeferredValue?延迟显示重内容,输入仍快06 §6

7. Suspense

问题简要回答延伸
作用?子树未就绪时显示 fallback06
原理?render 中 throw thenable → 边界捕获 → retryLane 重试06 §4

8. Server Components(19 稳定)

问题简要回答延伸
RSC?服务端渲染组件树,Flight 下发;Client 边界水合07-RSC
与 SSR 区别?不仅是 HTML,还有组件描述 + 更小 client bundle07 §3

9. 读源码从哪开始

  1. ReactHooks.jsReactFiberHooks.js(Hooks)
  2. ReactFiberWorkLoop.js(循环、调度入口)
  3. ReactFiberLane.js(优先级)
  4. Scheduler.js(时间切片)

专题路径见各章「源码位置」。


10. 裸 React 工程:Do / Don't(高频)

场景✅ Do❌ Don't原因
列表 key稳定唯一 item.id随机 key、可重排列表用 indexreconciliation 错位
Hooks仅顶层;开 eslint-plugin-react-hooks条件/循环里调 Hook(use 除外)槽位错乱 / Invalid hook call
单 React 实例react/react-dom 版本一致;库用 peerDepslink 出两份 ReactInvalid hook call
Effect幂等 + cleanup;数据拉取用专用库无清理、把 effect 当 mount 一次Strict Mode 双调用
props → state单一数据源;key 重置useEffect 同步 props 到 state多渲染、闪动
异步 setStatesetX(p => …)闭包旧值 setX(x+1)stale closure

精简六条:稳定 key → 顶层 Hooks → 单 React 实例 → Effect 可清理 → 少派生 state → 函数式 setState。

11.


11. 总结

遇到问题先判断属于:渲染阶段(Render/Commit)、优先级(Lanes/Transition)、订阅外部 store(Zustand 等)、还是 RSC 边界。再打开上表对应专题文档,比通读源码更高效。

MIT License.