React Chronicle:资料与注释
本页列出这部 Chronicle 使用的主要资料。资料按“同期代码与讨论 → 官方 RFC / 发布说明 → 参与者回忆 → 本文综合判断”的优先级组织。访问日期除特别说明外均为 2026-08-07。
如何阅读这些来源
- 同期一手资料最适合确认“当时实际合入了什么、维护者公开承诺了什么”。提交、PR 和源码可以证明实现,却不一定完整记录动机。
- RFC 与官方文章通常同时包含动机、替代方案和迁移策略,但仍代表项目方的叙述视角。
- 参与者回忆能补足 React 开源前的内部历史。由于它们多写于事后,本文把它们标成“参与者回忆”,不与同期提交等量齐观。
- 本文判断是把多份材料连成因果链后的工程解释,不冒充项目方原话。
1. 起源、开源与早期设计
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| React acknowledgements:React 的起源与 XHP、Bolt/FaxJS、SML 影响 | 官方历史说明 | 确认 XHP、Bolt、FaxJS、Jordan Walke 与 OCaml/SML 思想的关系。 |
| Jordan Walke 访谈全文 | 参与者回忆 | 补充 FBolt、广告系统压力、函数式 UI 和 React Native 原型的内部背景。 |
| Our First 50,000 Stars | 官方团队回顾 | 补充 2013 开源前后的演讲、JSX 反应、命名与早期推广过程。 |
Initial public release commit 75897c2 | 同期代码 | 锚定 2013-05-29 初始公开版及其真实文件结构。 |
| Why React?(2013) | 同期官方文章 | 确认 React 当时对“不是 MVC、没有模板、可组合组件、重新渲染”的公开定位。 |
ReactCompositeComponent.js at initial release | 同期源码 | 观察 createClass、mixin、生命周期协议,以及“render 不应有副作用”的早期约束。 |
ReactReconcileTransaction.js at initial release | 同期源码 | 解释早期 reconciler 如何用 transaction 包装事件开关、DOM selection 与 mount-ready 回调。 |
EventPluginHub.js at initial release | 同期源码 | 说明合成事件不是简单的浏览器事件别名,而是提取、排队和派发管线。 |
2. Flux、生态与 renderer 分离
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| An Application Architecture For React(Flux,2014) | 同期官方文章 | 确认 Flux 解决的是应用数据流,而 React core 有意维持较窄职责。 |
| Introducing React Native(2015) | 同期官方文章 | 确认“learn once, write anywhere”、原生 host view 与 React 编程模型复用。 |
| React v0.14 release | 官方发布说明 | 说明 react 与 react-dom 拆包、无状态函数组件和 DOM node 返回行为的变化。 |
| Create React App repository | 代码与项目史 | 用于讨论 2016 后“零配置起步”怎样降低 React 工具链门槛。 |
| Sunsetting Create React App(2025) | 官方决策说明 | 解释 React 推荐路径为何从通用 build tool 转向 framework 或现代构建工具。 |
3. Fiber 重写
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| PR #6690 — New Reconciler Infra | 同期 PR / 代码 | Fiber 的可验证起点:Noop renderer、nextUnitOfWork、高低优先级回调与 deadline。 |
| PR #6981 — simple updates and fiber pooling | 同期 PR / 代码 | 确认 alternate、current/work-in-progress 双树及“最多两棵树”的对象池设计。 |
| PR #7154 — Host Side Effects | 同期 PR / 代码 | 确认副作用链、先完成 reconciliation 再调用 host environment 的 commit 边界。 |
| React Fiber Architecture | 维护者解释文档 | 帮助解释 incremental rendering、priority、pull-based scheduling 与 Fiber 的概念模型。 |
| React v16.0 release | 官方发布说明 | 确认 Fiber 上线时的 error boundary、fragment、portal、新 SSR 与兼容策略。 |
| Update on Async Rendering(2018) | 官方迁移说明 | 解释旧 componentWill* 生命周期为何不适合可重放/可中断 render。 |
| React v17.0 release | 官方发布说明 | 说明事件委托从 document 移到 root 及“无新功能版本”的渐进升级意图。 |
4. Hooks
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| RFC #68 — React Hooks | RFC | 同时引用动机、采用策略、Rules of Hooks、旧闭包和全局 render state 等已知代价。 |
| React v16.8: The One With Hooks | 官方发布说明 | 锚定 Hooks 稳定发布及其渐进采用定位。 |
ReactFiberHooks.js at v16.8.0 | 同期源码 | 确认 Hook 记录是 Fiber memoizedState 上的链表,dispatcher 决定 mount/update 行为,并按调用顺序配对。 |
| Rules of Hooks | 官方参考文档 | 用于区分 API 习惯与实现所需的稳定调用顺序。 |
5. Concurrent React、Suspense 与服务端渲染
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| React 18 release | 官方发布说明 | 确认 concurrent rendering 通过 createRoot、transitions、automatic batching 与 Suspense 等 feature 渐进启用。 |
| React 18 working group discussions | 同期工作组讨论 | 观察命名、迁移、外部 store、一致性和生态兼容问题如何公开讨论。 |
ReactFiberLane.new.js at v18.2.0 | 同期源码 | 说明 lanes 如何用位掩码表示 sync、input、default、transition、retry、idle、offscreen 等工作集合。 |
useSyncExternalStore working-group discussion | 设计讨论 | 解释 concurrent rendering 对外部可变 store 快照一致性的要求。 |
| New Suspense SSR Architecture in React 18 | 维护者设计说明 | 解释 streaming HTML、Selective Hydration 与 Suspense boundary 的协作。 |
6. Server Components、Flight 与 Actions
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| Data Fetching with React Server Components(2020) | 官方研究预告 | 锚定 RSC 首次公开时的目标:零 client bundle 组件、直接访问 server data、保留 client state。 |
| RFC #188 — Server Components | RFC | 区分 Server/Client Component 能力、序列化边界、bundler 集成与渐进采用。 |
ReactFlightServer.js at v19.2.0 | 同期源码 | 观察 chunk、client/server reference、thenable、hint 与 stream config 如何组成 Flight server。 |
| React 19 release | 官方发布说明 | 确认 Actions、useActionState、useOptimistic、use、ref-as-prop 与 RSC 稳定边界。 |
| Critical Security Vulnerability in React Server Components(2025) | 官方安全公告 | 说明 Server Function/RSC 协议进入可信服务端边界后带来的安全责任;具体修复版本应以最新公告为准。 |
| React security blog index | 官方更新入口 | 由于 2025–2026 年存在连续后续公告,本文不固定一组可能过时的“安全版本”,而要求读者查最新公告。 |
7. Compiler、React 19.2 与治理
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| React Compiler v1.0 | 官方发布说明 | 确认 Compiler 1.0、React 17+ 兼容、Prepack 经验、CFG/HIR 重写、渐进 gating 与 lint 诊断。 |
HIR.ts at v19.2.0 | 同期源码 | 确认 AST → HIR → analysis → Reactive Scopes → codegen → AST 的核心数据流。 |
| React 19.2 | 官方发布说明 | 确认 <Activity>、useEffectEvent、cacheSignal、Performance Tracks 与 partial pre-rendering。 |
| The React Foundation(2026) | 官方治理公告 | 确认 React、React Native、JSX 转入 Linux Foundation 托管的独立基金会,以及技术治理与董事会职责分离。 |
| React Foundation site | 官方组织资料 | 用于核对组织使命、成员与治理资料的持续更新。 |
8. 版本与仓库元数据
| 来源 | 类型 | 本文主要用途 |
|---|---|---|
| React releases | 官方仓库发布记录 | 校验版本时间、补丁序列与当前维护分支。 |
| React repository | 官方代码仓库 | 所有代码快照、提交、PR 与文件链接的 canonical source。 |
| React RFCs repository | 官方 RFC 仓库 | 查阅被提议、接受、推迟或仍在演化的公共设计。 |
注释与不确定性
React 开源前的内部时间线
Bolt、FaxJS、FBolt、XHP-JS、React Native iOS 原型等名称来自官方 acknowledgements、Jordan Walke 访谈和团队回顾。它们的精确日期、代码边界与命名在不同回忆中并不总完全一致。本文只把多份来源交叉支持的顺序写成“史料事实”;对思想影响和因果关系使用“参与者回忆”或“本文判断”。
“Virtual DOM”不是一个单独可定位的发明
初始提交没有一个名为 VirtualDOM 的核心模块。轻量 element、child reconciliation、key、transaction、DOM operation 与事件系统共同构成开发者后来称作 Virtual DOM 的行为。本文因此避免把它写成一个孤立算法。
Fiber 的动机与实现
Fiber 的可中断调度目标可从 PR、架构文档和后续发布说明确认;但早期 PR 明显是探索性实现,包含未完成分支、TODO 和被后来替换的字段。本文按提交顺序描述其形成,不把最终 lanes/commit 架构倒灌成 2016 年一次完成的蓝图。
Server Components 与 framework
RSC 的 React 协议与产品可用体验不是同一层。模块图、manifest、路由、缓存、部署和 Server Function endpoint 大多由 framework/bundler 实现。本文讨论的是边界如何形成,不把某个 framework 的具体行为当作 React core 的永久规范。
2026 年后的内容
Chronicle 的“现在”截点为 2026-08-07。React release、安全公告、基金会技术治理和 Compiler 支持范围仍会变化;涉及部署与安全时应优先查看最新官方 release/advisory,而不是把本文当作实时兼容矩阵。