react总览

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源码学习

感谢看到最后

①如果有不同看法,欢迎在文章下方留言、评论

②如果对你有启发或帮助,欢迎恰个点赞吧,谢谢支持
文章内容仅供学习参考,如有侵权,非常抱歉,请立即练习作者删除

相关推荐
顾青3 小时前
微信小程序 VisionKit 实战(二):静态图片人脸检测与人像区域提取
前端·微信小程序
hmfy3 小时前
那些前端老鸟才知道的秘密
前端
不一样的少年_3 小时前
她说想要浪漫,我把浏览器鼠标换成了柴犬,点一下就有烟花(附源码)
前端·javascript·浏览器
顾青3 小时前
微信小程序实现身份证识别与裁剪(基于 VisionKit)
前端·微信小程序
星链引擎3 小时前
技术深度聚焦版(侧重技术原理与代码细节)
前端
呵阿咯咯3 小时前
ueditor富文本编辑器相关问题
前端
月弦笙音3 小时前
【Vue3】Keep-Alive 深度解析
前端·vue.js·源码阅读
地方地方3 小时前
手写 AJAX 与封装 MyAxios:深入理解前端网络请求
前端·javascript·面试
该用户已不存在3 小时前
7个没听过但绝对好用的工具
前端·后端