React、React-dom 和 Babel 是构建现代 React 应用的三个核心工具,它们各司其职,协同工作。
1. React
作用:定义组件和管理状态的核心库。
- 核心功能:
- 提供
React.createElement()、React.Component、useState、useEffect等 API。 - 定义组件的结构、状态(state)、属性(props)和生命周期。
- 创建和管理虚拟 DOM (Virtual DOM) 树。
- 实现组件的组合、复用和状态管理逻辑。
- 提供
- 关键点:
React本身不负责与浏览器 DOM 交互。- 它是平台无关的,可用于 Web、移动端(React Native)、命令行等。
示例:
import React, { useState } from 'react';
function MyComponent() {
const [count, setCount] = useState(0);
return <div>Count: {count}</div>;
}
这里
useState和React的组件定义能力都来自react包。
2. React-dom
作用:将 React 组件渲染到 DOM 的桥梁。
- 核心功能:
- 提供
ReactDOM.render()(v17 及以下)或createRoot()(v18+)方法,将 React 组件挂载到真实的 DOM 节点上。 - 负责协调 (Reconciliation) 过程,将虚拟 DOM 的变化高效地更新到真实 DOM。
- 处理事件绑定、DOM 操作等浏览器特定的任务。
- 提供
- 关键点:
react-dom是针对 Web 平台的渲染器。- 如果是 React Native,则使用
react-native作为渲染器。
示例:
import ReactDOM from 'react-dom/client';
import App from './App';
// 将 <App /> 渲染到 id 为 'root' 的 DOM 元素中
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
这里的
createRoot和render方法来自react-dom包。
3. Babel
作用:JavaScript 编译器,将现代 JS 和 JSX 转换为浏览器兼容的代码。
- 核心功能:
- 转换 JSX:将
<div>Hello</div>这样的 JSX 语法转换为React.createElement('div', null, 'Hello')。 - 转换现代 JavaScript:将 ES6+ 语法(如
const、箭头函数、class、async/await)转换为 ES5 等旧版本浏览器可理解的语法。 - 支持新特性:通过插件支持尚未广泛支持的 JS 新特性(如可选链
?.)。
- 转换 JSX:将
- 关键点:
- Babel 不是 React 特有的,但 React 项目通常依赖它来处理 JSX。
- 它是一个开发时工具(Dev-time Tool),在构建过程中运行。
示例:
// 开发者写的代码 (JSX + ES6)
const element = <h1 className="greeting">Hello, world!</h1>;
// Babel 编译后
const element = React.createElement(
'h1',
{ className: 'greeting' },
'Hello, world!'
);
三者如何协同工作?
- 开发者编写代码:
- 使用
React定义组件(包含 JSX 和 Hooks)。
- 使用
- Babel 编译:
- 将 JSX 转换为
React.createElement()调用。 - 将现代 JS 语法降级。
- 将 JSX 转换为
- React 处理:
- 执行组件逻辑,生成虚拟 DOM 树。
- React-dom 渲染:
- 接收虚拟 DOM,将其渲染到真实 DOM 中,并处理更新。
graph LR
A[开发者代码 JSX/ES6+] --> B(Babel)
B --> C[编译后 JS/React.createElement]
C --> D(React)
D --> E[虚拟 DOM]
E --> F[React-dom]
F --> G[真实 DOM]
总结对比
| 工具 | 作用 | 是否必需 | 运行环境 |
|---|---|---|---|
| React | 定义组件、状态、虚拟 DOM | ✅ 是 | 运行时 (Runtime) |
| React-dom | 将 React 组件渲染到 Web DOM | ✅ 是 (Web 项目) | 运行时 (Runtime) |
| Babel | 编译 JSX 和现代 JS 语法 | ✅ 是 (使用 JSX/新语法时) | 开发时 (Dev-time) |
一句话概括:
React告诉你“做什么”(组件结构和逻辑)。Babel帮你把“写法”转成浏览器能懂的语言。React-dom负责“怎么做”(把结果画在屏幕上)。
THE END


