在react 当中Element 和 Component 有何区别?
Element(元素) 和 Component(组件)是 React 核心机制 里最容易混淆、但又非常重要的概念之一。
一句话总结
名称 | 定义 | 本质 | 由谁创建 | 举例 |
---|---|---|---|---|
React Element | React 用来描述 UI 的最小单元 | 一个普通的 JavaScript 对象 | React.createElement() | <div /> , <MyButton /> |
React Component | 用户自定义的组件类型 | 一个 函数或类 | 开发者定义 | function MyButton() { ... } |
举个通俗例子
假设你写了这样一段代码:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
这段里:
-
Welcome —— 是一个 Component(组件)。
-
<Welcome name="Sara" />
—— 是一个 Element(元素)。
它们在底层的区别
1. React Element
React Element 是一个简单的 描述 UI 的对象,React 通过它来决定要渲染什么。
比如上面的例子:
const element = <h1 className="greet">Hello</h1>;
编译后等价于:
const element = React.createElement("h1", { className: "greet" }, "Hello");
也就是一个普通的 JS 对象:
{
type: 'h1',
props: { className: 'greet', children: 'Hello' }
}
React 最后会根据这个对象去创建 DOM 节点。
2. React Component
React Component 是一种 可以返回 React Element 的函数或类:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
你可以这样用:
<Welcome name="Sara" />
React 内部其实会做:
React.createElement(Welcome, { name: "Sara" });
然后执行 Welcome(props),返回一个 React Element(比如 <h1>Hello, Sara</h1>
)。
小结对比表
特性 | React Element | React Component |
---|---|---|
是什么 | UI 的描述对象 | 生成 UI 的函数/类 |
类型 | JavaScript 对象 | 函数 或 类 |
作用 | 告诉 React 渲染什么 | 定义 UI 逻辑和行为 |
创建方式 | React.createElement() |
function / class |
能否包含状态 | ❌ 不能 | ✅ 可以(class 或 useState) |
能否复用逻辑 | ❌ 不行 | ✅ 可以(Hooks, props) |
总结一句话记忆
Element 是结果,Component 是产生结果的工厂。
也就是说:
-
Component 负责“生产”。
-
Element 是生产出来的“货物”。