1 react 工作流
react 全流程工作机制,每个阶段如下图所示
客户端初始化:

SSR(Server-Side Rendering,服务端渲染)是一种网页渲染方式,指在服务器端提前生成完整的 HTML 页面(包含动态数据),再将其发送给浏览器,浏览器接收后可直接解析并展示页面,无需等待客户端 JavaScript(JS)加载执行后再生成内容。
调度/触发阶段:

渲染阶段:

提交阶段:

2 react 包一览
查看react packages 文件夹,大体上,我们可以将react的package包分为六类: 核心包、服务端渲染、渲染器、开发工具、工具包、实验性功能、绑定层。让我们一一揭开这六类的面纱
核心包
顾名思义,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性能优化的核心所在,它实现了时间切片、优先级调度等特性,以保证用户体验的流畅性。
注: React Fiber 是 React 16 中引入的全新协调(Reconciliation)引擎,是 React 底层架构的核心升级,其设计目标是解决传统 React 渲染过程中 "无法中断长任务、导致 UI 卡顿" 的问题,为 "时间切片""并发模式" 等特性提供底层支持。
scheduler
调度器负责任务的优先级管理和执行时机控制。React通过scheduler来实现时间切片和并发模式,使得React可以在不阻塞主线程的情况下执行渲染工作。scheduler会根据任务优先级和浏览器的空闲时间来安排任务执行,确保用户交互的流畅性。
渲染器相关
java
├── 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开发工作流的重要组成部分。
服务端渲染
vbscript
├── react-server/
├── react-server-dom-webpack/
react-server
提供了React服务端渲染的核心功能,支持在Node.js环境中渲染React组件。
react-server-dom-webpack
React Server Components的实现,允许组件在服务器上渲染并将结果流式传输到客户端。这种方式可以减少客户端JavaScript的体积,提高首屏加载速度,同时保持React组件模型的一致性。它与webpack集成,处理模块加载和代码分割。
工具包
vbnet
├── react-is/
├── react-cache/
├── shared/
react-is
提供了一系列工具函数,用于检测React元素的类型。例如,可以用它来判断一个对象是否是React元素、Fragment、Context等。这在开发库和高阶组件时特别有用。
react-cache
实现了资源缓存的功能,主要用于React Suspense特性。它可以缓存异步请求的结果,避免重复请求,提高应用性能。
shared
包含了React各个包之间共享的工具函数和常量,如对象池、错误处理、环境检测等。这些代码被多个React包复用,确保了行为的一致性。
绑定层
perl
├── react-dom-bindings/
├── use-subscription/
react-dom-bindings
react-dom的底层实现,负责将React的通用渲染逻辑与具体的DOM操作绑定起来。它处理DOM元素的创建、属性更新、事件系统等细节。
use-subscription
提供了一个React Hook,用于安全地订阅外部数据源。它确保组件在卸载时正确地取消订阅,避免内存泄漏和无效更新。
3 结论
自顶向下,抓大放小,局部攻略进行分析
最后
参考链接:react源码学习
感谢看到最后
①如果有不同看法,欢迎在文章下方留言、评论
②如果对你有启发或帮助,欢迎恰个点赞吧,谢谢支持
文章内容仅供学习参考,如有侵权,非常抱歉,请立即练习作者删除