react
react 基础包, 只提供定义 react 组件(ReactElement)的必要函数, 一般来说需要和渲染器(react-dom,react-native)一同使用. 在编写react应用的代码时, 大部分都是调用此包的 api.
react-dom
react 渲染器之一, 是 react 与 web 平台连接的桥梁(可以在浏览器和 nodejs 环境中使用), 将react-reconciler中的运行结果输出到 web 界面上. 在编写react应用的代码时,大多数场景下, 能用到此包的就是一个入口函数ReactDOM.render(<App/>, document.getElementById('root')), 其余使用的 api, 基本是react包提供的.
react-reconciler
react 得以运行的核心包(综合协调react-dom,react,scheduler各包之间的调用与配合).管理 react 应用状态的输入和结果的输出. 将输入信号最终转换成输出信号传递给渲染器.
scheduleUpdateOnFiber
), 将fiber
树生成逻辑封装到一个回调函数中(涉及fiber
树形结构, fiber.updateQueue
队列, 调和算法等),performSyncWorkOnRoot
或performConcurrentWorkOnRoot
)送入scheduler
进行调度scheduler
会控制回调函数执行的时机, 回调函数执行完成后得到全新的 fiber 树react-dom
, react-native
等)将 fiber 树形结构最终反映到界面上scheduler
调度机制的核心实现, 控制由react-reconciler送入的回调函数的执行时机, 在concurrent模式下可以实现任务分片. 在编写react应用的代码时, 同样几乎不会直接用到此包提供的 api.
react-reconciler
提供)concurrent
模式下才有此特性)为了便于理解, 可将 react 应用整体结构分为接口层(api
)和内核层(core
)2 个部分
接口层(api)
react
包, 平时在开发过程中使用的绝大部分api
均来自此包(不是所有). 在react
启动之后, 正常可以改变渲染的基本操作有 3 个.
setState()
dispatchAction
去改变 hook 对象setState
或dispatchAction
的辅助才能改变)以上setState
和dispatchAction
都由react
包直接暴露. 所以要想 react 工作, 基本上是调用react
包的 api 去与其他包进行交互.
内核层(core)
整个内核部分, 由 3 部分构成:
scheduler
包, 核心职责只有 1 个, 就是执行回调.
react-reconciler
提供的回调函数, 包装到一个任务对象中.react-reconciler
包, 有 3 个核心职责:
HostConfig
协议(如: react-dom
), 保证在需要的时候, 能够正确调用渲染器的 api, 生成实际节点(如: dom
节点).react-dom
包(初次render
)和react
包(后续更新setState
)发起的更新请求.fiber
树的构造过程包装在一个回调函数中, 并将此回调函数传入到scheduler
包等待调度.react-dom
包, 有 2 个核心职责:
react
应用的启动(通过ReactDOM.render
).HostConfig
协议(源码在 ReactDOMHostConfig.js 中), 能够将react-reconciler
包构造出来的fiber
树表现出来, 生成 dom 节点(浏览器中), 生成字符串(ssr).<aside> 📌
注意:
架构分层
这样的术语.