React 的源码结构分析

#react

目录

总结

  • 使用 yarn 的多包管理
  • 再读一遍

1. 主要目录结构

react/
├── fixtures/        # 测试固件,包含一些测试用例
├── packages/        # 核心包目录,包含主要源码
├── scripts/        # 构建和开发脚本
└── docs/           # 文档(已迁移到独立仓库)

2. packages 目录(核心代码)

packages/
├── react/                     # React 核心库
├── react-dom/                 # DOM 渲染器
├── react-reconciler/          # 协调器实现
├── react-native-renderer/     # React Native 渲染器
├── scheduler/                 # 调度器
├── shared/                    # 共享工具代码
└── react-is/                  # 类型检查工具

3. 各个核心包的功能分析

3.1. react 包(packages/react/)

react/
├── src/
│   ├── React.js              # React 对外接口
│   ├── ReactElement.js       # createElement 实现
│   ├── ReactHooks.js        #  Hooks 实现
│   └── ReactContext.js      # Context 实现

功能:

  • 提供核心 API
  • 定义组件基类
  • 实现 Hooks
  • 提供 Context 功能

3.2. react-dom 包(packages/react-dom/)

react-dom/
├── src/
│   ├── client/              # 客户端渲染相关
│   ├── server/              # 服务端渲染相关
│   └── events/              # 事件系统

功能:

  • 处理 DOM 操作
  • 实现事件系统
  • 提供服务端渲染
  • 管理生命周期

3.3. react-reconciler 包(packages/react-reconciler/)

react-reconciler/
├── src/
│   ├── ReactFiber.js           # Fiber 节点结构
│   ├── ReactFiberWorkLoop.js   # 工作循环
│   ├── ReactUpdateQueue.js     # 更新队列
│   └── ReactFiberReconciler.js # 协调器实现

功能:

  • 实现虚拟 DOM
  • Fiber 架构实现
  • Diff 算法
  • 更新调度

3.4. scheduler 包(packages/scheduler/)

scheduler/
├── src/
│   ├── Scheduler.js            # 调度器实现
│   ├── SchedulerPriorities.js  # 优先级管理
│   └── SchedulerHostConfig.js  # 宿主环境配置

功能:

  • 任务调度
  • 优先级管理
  • 时间分片
  • 并发模式支持

4. shared 包(packages/shared/)

shared/
├── ReactSymbols.js        # React 内部 Symbol 定义
├── ReactTypes.js          # 类型定义
└── ReactFeatureFlags.js   # 特性开关

功能:

  • 共享常量
  • 工具函数
  • 类型定义
  • 特性标记

5. 核心流程和关系

图片&文件

  graph TB
    subgraph Application
        App[应用代码]
    end
    
    subgraph React Core
        ReactAPI[React API]
        Hooks[Hooks]
        Context[Context]
    end
    
    subgraph Reconciliation
        Reconciler[Reconciler]
        Fiber[Fiber Tree]
        Diff[Diff 算法]
    end
    
    subgraph Rendering
        ReactDOM[React DOM]
        RNRenderer[RN Renderer]
    end
    
    subgraph Scheduling
        Scheduler[Scheduler]
        Priority[Priority Queue]
    end
    
    App --> ReactAPI
    ReactAPI --> Reconciler
    Hooks --> Reconciler
    Context --> Reconciler
    Reconciler --> Fiber
    Fiber --> Diff
    Diff --> Scheduler
    Scheduler --> Priority
    Priority --> ReactDOM
    Priority --> RNRenderer
    
    style Application fill:#f9f,stroke:#333,stroke-width:2px
    style React Core fill:#bbf,stroke:#333,stroke-width:2px
    style Reconciliation fill:#bfb,stroke:#333,stroke-width:2px
    style Rendering fill:#fbb,stroke:#333,stroke-width:2px
    style Scheduling fill:#ffb,stroke:#333,stroke-width:2px
  • 应用层:即 ==React 入口==
    • 开发者编写的应用代码
    • 使用 React API 创建组件和元素
  • React 核心层:
    • 处理组件定义和基础抽象
    • 管理 Hooks 和 Context
    • 提供核心 API 接口
  • ==协调层==:
    • 维护 Fiber 树结构
    • 执行 ==Diff 算法==
    • 计算更新内容
  • 调度层:
    • 管理任务优先级
    • 控制更新时机
    • 实现==时间分片==
  • 渲染层:
    • 执行实际的 DOM 操作
    • 处理平台特定的渲染逻辑

6. 重要概念和实现

  • Fiber 架构:
    • 实现可中断的更新
    • 支持优先级调度
    • 更好的性能和用户体验
  • 并发模式:
    • 支持任务中断和恢复
    • 实现时间切片
    • 优化用户交互体验
  • 调度系统:
    • 基于优先级的任务调度
    • 支持==异步渲染==
    • 实现==可中断更新==