react dom
该包作为 DOM 和服务器渲染器的 React 入口。它旨在与通用 React 包搭配使用。
一、出口
在 "package.json" 文件中导出了文件的主要 API 导出入口:
{
"exports": {
".": {
"react-server": "./react-dom.react-server.js",
"default": "./index.js" // 默认出口
},
"./client": {
"react-server": "./client.react-server.js",
"default": "./client.js"
},
"./server": {
"react-server": "./server.react-server.js",
"workerd": "./server.edge.js",
"bun": "./server.bun.js",
"deno": "./server.node.js",
"worker": "./server.browser.js",
"node": "./server.node.js",
"edge-light": "./server.edge.js",
"browser": "./server.browser.js",
"default": "./server.node.js"
},
"./server.browser": {
"react-server": "./server.react-server.js",
"default": "./server.browser.js"
},
"./server.bun": {
"react-server": "./server.react-server.js",
"default": "./server.bun.js"
},
"./server.edge": {
"react-server": "./server.react-server.js",
"default": "./server.edge.js"
},
"./server.node": {
"react-server": "./server.react-server.js",
"default": "./server.node.js"
},
"./static": {
"react-server": "./static.react-server.js",
"workerd": "./static.edge.js",
"deno": "./static.browser.js",
"worker": "./static.browser.js",
"node": "./static.node.js",
"edge-light": "./static.edge.js",
"browser": "./static.browser.js",
"default": "./static.node.js"
},
"./static.browser": {
"react-server": "./static.react-server.js",
"default": "./static.browser.js"
},
"./static.edge": {
"react-server": "./static.react-server.js",
"default": "./static.edge.js"
},
"./static.node": {
"react-server": "./static.react-server.js",
"default": "./static.node.js"
},
"./profiling": {
"react-server": "./profiling.react-server.js",
"default": "./profiling.js"
},
"./test-utils": "./test-utils.js",
"./unstable_testing": {
"react-server": "./unstable_testing.react-server.js",
"default": "./unstable_testing.js"
},
"./unstable_server-external-runtime": "./unstable_server-external-runtime.js",
"./src/*": "./src/*",
"./package.json": "./package.json"
}
}
二、与 react 包的关系
1. 流程图
2. 对比表格
| 包名 | 角色 | 是否暴露给开发者 |
|---|---|---|
| react | 核心运行时 (定义组件/虚拟 DOM /协调算法/ HOOKS ) | ✅ |
| react-dom | 渲染器入口 (挂载/更新/卸载组件到 DOM 的接口) | ✅ |
| react-dom-bindings | DOM 操作的具体实现 (事件委托/样式处理/ DOM 属性同步等细节) | ❌ 内部私有 |
3. 协作流程
- react-dom
- 接收组件树 → 调用 react的协调算法生成 Fiber 树
- 通过 react-dom-bindings 执行具体 DOM 操作
- react-dom-bindings
- 执行 DOM 增删改查(如 appendChild, setAttribute)
- 处理跨浏览器兼容性问题(如事件系统)
- 管理表单元素的受控/非受控状态
- react
- 提供虚拟 DOM 差异比对(diffing) (依赖 react-reconciler)
- 调度更新任务(依赖 scheduler 包)