Skip to content

react 源码概览

react的版本变化比较大,本次我们将以react19.2.0为源码解析的版本。需要注意的是: 为了不占用过多的篇幅,本文中所有的源代码的函数都是移除开发代码之后的伪代码

全流程工作机制

react的全流程在一定程度上可以分为四个阶段:

  1. 客户端初始化
  2. 调度/触发阶段
  3. 渲染阶段
  4. 提交阶段

为了让大家能对react全流程工作机制有个详细的了解,我制作了一个流程图,方便大家对react的全流程有一个整体的了解。

react包一览

在对 React 的工作流程有了整体的把握后,我们再来看看 React 19.2.0 的源码仓库中都包含了哪些包。打开 react packages ,我们就能发现react 包结构如下:

react packages
javascript
packages/
├── dom-event-testing-library/
├── eslint-plugin-react-hooks/
├── internal-test-utils/
├── jest-react/
├── react/
├── react-art/
├── react-cache/
├── react-client/
├── react-debug-tools/
├── react-devtools/
├── react-devtools-core/
├── react-devtools-extensions/
├── react-devtools-fusebox/
├── react-devtools-inline/
├── react-devtools-shared/
├── react-devtools-shell/
├── react-devtools-timeline/
├── react-dom/
├── react-dom-bindings/
├── react-is/
├── react-markup/
├── react-native-renderer/
├── react-noop-renderer/
├── react-reconciler/
├── react-refresh/
├── react-server/
├── react-server-dom-esm/
├── react-server-dom-fb/
├── react-server-dom-parcel/
├── react-server-dom-turbopack/
├── react-server-dom-webpack/
├── react-suspense-test-utils/
├── react-test-renderer/
├── scheduler/
├── shared/
├── use-subscription/
└── use-sync-external-store/

大体上,我们可以将react的package包分为六类: 核心包、服务端渲染、渲染器、开发工具、工具包、实验性功能、绑定层。让我们一一揭开这六类的面纱。

react核心包

顾名思义,react核心包是react的核心功能,是react的基础,也是react的核心。

├── react/
├── react-reconciler/
├── scheduler/

react

这是React的基础包,提供了所有React组件的基本API,如 React.createElement、React.Component、React.useState等。包定义了React的公共接口,但不包含任何渲染相关的代码。当我们在项目中导入React时,实际上就是导入这个包。

react-reconciler

React的核心调和引擎,主要负责Fiber架构。当组件状态发生变化时,reconciler会计算出哪些DOM需要更新,然后交给渲染器执行实际的DOM操作。reconciler是React性能优化的核心所在,它实现了时间切片、优先级调度等特性,以保证用户体验的流畅性。

scheduler

调度器负责任务的优先级管理和执行时机控制。React通过scheduler来实现时间切片和并发模式,使得React可以在不阻塞主线程的情况下执行渲染工作。scheduler会根据任务优先级和浏览器的空闲时间来安排任务执行,确保用户交互的流畅性。

渲染器相关

├── react-dom/
├── react-native-renderer/
├── react-art/
├── react-test-renderer/

react-dom 包

React最常用的渲染器,负责将React组件渲染到浏览器DOM中。它包含了所有与浏览器DOM交互的代码,如事件系统、属性处理等。同时react-dom还提供了服务端渲染的功能(ReactDOMServer)。

react-native-renderer 包

React Native的渲染器,负责将React组件渲染为原生移动应用UI组件,将React的声明式编程模型带到了移动应用开发中。

react-art 包

一个用于绘制矢量图形的渲染器,可以将React组件渲染为SVG、Canvas等图形。

react-test-renderer 包

用于测试的渲染器,可以将React组件渲染为纯JavaScript对象,方便进行快照测试和单元测试。它不依赖DOM环境,可以在Node.js中运行。

开发工具

├── react-devtools-core/
├── react-devtools-extensions/
├── react-refresh/

react-devtools-core 包

这是React开发者工具的核心实现,提供了组件树检查、性能分析等功能的底层支持。

react-devtools-extensions

基于core包构建的浏览器扩展,为Chrome、Firefox等浏览器提供React调试工具。这些工具可以帮助开发者检查组件层次结构、props和state变化、性能瓶颈等。

react-refresh

实现了React的热更新功能,使得在开发过程中修改代码后,浏览器可以在不丢失组件状态的情况下更新UI。这大大提高了开发效率,是现代React开发工作流的重要组成部分。

服务端渲染

├── react-devtools-core/
├── react-server-dom-webpack/

react-server

提供了React服务端渲染的核心功能,支持在Node.js环境中渲染React组件。

react-server-dom-webpack

React Server Components的实现,允许组件在服务器上渲染并将结果流式传输到客户端。这种方式可以减少客户端JavaScript的体积,提高首屏加载速度,同时保持React组件模型的一致性。它与webpack集成,处理模块加载和代码分割。

工具包

├── react-is/
├── react-cache/
├── shared/

react-is

提供了一系列工具函数,用于检测React元素的类型。例如,可以用它来判断一个对象是否是React元素、Fragment、Context等。这在开发库和高阶组件时特别有用。

react-cache

实现了资源缓存的功能,主要用于React Suspense特性。它可以缓存异步请求的结果,避免重复请求,提高应用性能。

shared

包含了React各个包之间共享的工具函数和常量,如对象池、错误处理、环境检测等。这些代码被多个React包复用,确保了行为的一致性。

绑定层

├── react-dom-bindings/
├── use-subscription/

react-dom-bindings

react-dom的底层实现,负责将React的通用渲染逻辑与具体的DOM操作绑定起来。它处理DOM元素的创建、属性更新、事件系统等细节。

use-subscription

提供了一个React Hook,用于安全地订阅外部数据源。它确保组件在卸载时正确地取消订阅,避免内存泄漏和无效更新。

全流程

Why halison sold house so fast. My friend had live a area same years before he back england.

He often imaged back to england when he retirement in the past, and plan live in the countrysie.

He bought a house and lived in when he back.

But he started complain there weather frequently.

Beacause thought there is summer, but it always rains, and offten cold.

It was so excitement for halison and he lived in the sun many years.

His beheiour is like he never live in england.

Finally, he can't stand it.

He sold house without settle, and leave this country.

His many year's imagnation are break down.

Hason consider every things, except weather.


微信公众号二维码