react启动过程

本文深入剖析React的启动过程,包括React包概览、启动模式(Legacy、Blocking、Concurrent)、创建全局对象、ReactDOMRoot对象的创建以及更新入口。重点讨论了在不同模式下React如何初始化,以及如何在不同模式下进入更新流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React 启动过程分析

经历一个月的学习整理,站在前人的肩膀上,对 React 有了一些浅薄的理解,希望记录自己的学习过程的同时也可以给大家带来一点小帮助。如果此系列文章对您有些帮助,还望在座各位义夫义母不吝点赞关注支持 🐶,也希望各位大佬拍砖探讨

React 包概览

  • 「react」 react 基础包,只提供定义 react 组件(React Element)的必要函数,一般来说需要和渲染器(react-dom,react-native)一同使用.在编写 react 应用的代码时,大部分都是调此包的 api.

  • 「react-dom」 react 渲染器之一,是 react 与 web 平台连接的桥梁(可以在浏览和 nodejs 环境中使用),将 react-reconciler 中的运行结果输出到 web 界面上.在编写 react 应用的代码时,大多数场景下,能用到此包的就是一个入口函数 ReactDOM.render(<APP/>,doucument.getElementByID('root)'),其余使用的 api,基本是 react 包提供的

  • 「react- reconciler」 react 得以运行的核心包(综合协调 react-dom,react,scheduler 各包之前的调用与配合).管理 react 应用状态的输入和结果的输出.将输入信号最终转换成输出信号传递给渲染器

  • 「scheduler」 调度机制的核心实现, 控制由 react-reconciler 送入的回调函数的执行时机, 在 concurrent 模式下可以实现任务分片. 在编写 react 应用的代码时, 同样几乎不会直接用到此包提供的 api. 核心任务就是执行回调(回调函数由 react-reconciler 提供) 通过控制回调函数的执行时机, 来达到任务分片的目的, 实现可中断渲染(concurrent 模式下才有此特性)

    alt

react 应用的启动过程

位于 react-dom 包,衔接 reconciler 运行流程中的输入步骤

启动模式

  1. legacy 模式: ReactDOM.render(<App />, rootNode). 这是当前 React app 使用的方式. 这个模式可能不支持这些新功能(concurrent 支持的所有功能).
// LegacyRoot
ReactDOM.render(<App />document.getElementById('root'), dom => {}); // 支持callback回调, 参数是一个dom对象
  1. Blocking 模式: ReactDOM.createBlockingRoot(rootNode).render(<App />). 它仅提供了 concurrent 模式的小部分功能.
// BlockingRoot
// 1. 创建ReactDOMRoot对象
const reactDOMBlockingRoot = ReactDOM.createBlockingRoot(
  document.getElementById('root'),
);
// 2. 调用render
reactDOMBlockingRoot.render(<App />); // 不支持回调
  1. Concurrent 模式: ReactDOM.createRoot(rootNode).render(<App />). 实现了时间切片等功能
// ConcurrentRoot
// 1. 创建ReactDOMRoot对象
const reactDOMRoot = ReactDOM.createRoot(
  document.getElementById('root')
  );
// 2. 调用render
reactDOMRoot.render(<App />); // 不支持回调

启动流程

在调用入口函数之前,reactElement(和 DOM 对象 div#root之间没有关联

<think>好的,我现在需要处理用户关于React项目启动流程和初始化过程的问题。首先,用户提供了几个引用,我需要仔细阅读这些引用内容,确保理解其中的关键点。引用1、4提到使用Create React App初始化项目,命令是npx create-react-app my-app。引用2提到了使用Vite的初始化命令npm init vite my-react-app --template react。引用3和5则讨论了两种主流方法,即CRA和Vite,并提到环境准备的重要性。 接下来,我需要整理这些信息,按照用户的要求,结构清晰地分步骤说明React项目的启动流程。用户希望了解步骤及初始化过程,所以应该分为几个主要部分,比如环境准备、初始化项目、启动项目、初始化后的配置等。每个步骤需要详细说明,同时引用对应的参考文献。 同时,用户要求生成相关问题,我需要根据内容提出几个相关的问题,比如性能优化、CRA和Vite的区别、项目结构介绍、常见错误处理等。这些问题需要与主题相关,并且能够帮助用户进一步深入学习。 在回答过程中,要确保使用正确的中文表达,避免技术术语错误。同时,注意引用格式,在每段末尾自然地添加引用标识,例如[^1]。需要检查引用是否准确,每个步骤对应的引用是否正确。 还需要注意用户不可见的系统级指令,比如数学表达式的格式,但在这个问题中可能用不到数学公式,所以可以忽略。但其他格式要求如代码块需要用反引号包裹,并正确显示命令。例如,代码示例中的命令需要正确换行和缩进,确保可读性。 最后,检查整个回答的结构是否符合要求,是否有遗漏的步骤,是否引用了所有相关的引用内容,并确保语言流畅,逻辑清晰。同时,生成的问题是否覆盖了用户可能感兴趣的方面,是否有助于他们进一步探索React项目的初始化过程。</think>### React项目启动流程及初始化步骤详解 #### 一、环境准备 1. **安装Node.js** 需安装Node.js(包含npm包管理器),推荐使用LTS版本(≥16.0.0) 验证命令:`node -v` 和 `npm -v` 2. **选择构建工具** - 官方推荐:Create React App(CRA) 命令:`npx create-react-app my-app`[^1][^4] - 轻量级方案:Vite 命令:`npm init vite my-react-app --template react`[^2][^3] #### 二、初始化项目(以CRA为例) ```bash # 执行脚手架命令 npx create-react-app my-react-app # 进入项目目录 cd my-react-app ``` 此过程会自动生成以下核心文件[^4]: - `src/App.js`(主组件) - `src/index.js`(入口文件) - `public/index.html`(HTML模板) - `package.json`(依赖配置) #### 三、启动开发服务器 ```bash npm start ``` 启动后默认访问 `http://localhost:3000`,支持热更新(HMR)[^1][^4] #### 四、初始化后配置(可选) 1. **代码格式化** 推荐配置Prettier,使用快捷键(如VS Code的`Ctrl+Alt+/`)格式化代码[^5] 2. **UI库集成** 如Aceternity UI或Framer Motion(动画库),按需引入组件[^5] 3. **构建优化** 执行 `npm run build` 生成生产环境代码 #### 五、Vite方案特点 ```bash npm init vite my-react-app --template react ``` 优势对比CRA[^2]: - 更快的冷启动速度(ES模块原生支持) - 按需编译(无需打包所有资源) - 默认支持TypeScript
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值