面试题:React、React-dom 和 babel 的作用分别是什么?

ReactReact-domBabel 是构建现代 React 应用的三个核心工具,它们各司其职,协同工作。


1. React

作用:定义组件和管理状态的核心库。

  • 核心功能
    • 提供 React.createElement()React.ComponentuseStateuseEffect 等 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>;
}

这里 useStateReact 的组件定义能力都来自 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 />);

这里的 createRootrender 方法来自 react-dom 包。


3. Babel

作用:JavaScript 编译器,将现代 JS 和 JSX 转换为浏览器兼容的代码。

  • 核心功能
    • 转换 JSX:将 <div>Hello</div> 这样的 JSX 语法转换为 React.createElement('div', null, 'Hello')
    • 转换现代 JavaScript:将 ES6+ 语法(如 const、箭头函数、classasync/await)转换为 ES5 等旧版本浏览器可理解的语法。
    • 支持新特性:通过插件支持尚未广泛支持的 JS 新特性(如可选链 ?.)。
  • 关键点
    • 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!'
);

三者如何协同工作?

  1. 开发者编写代码
    • 使用 React 定义组件(包含 JSX 和 Hooks)。
  2. Babel 编译
    • 将 JSX 转换为 React.createElement() 调用。
    • 将现代 JS 语法降级。
  3. React 处理
    • 执行组件逻辑,生成虚拟 DOM 树。
  4. 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
喜欢就支持一下吧
点赞8 分享