React是什么?

1008 字
5 分钟
React是什么?

React的中文含义是反应或者响应。 React的核心原理是:当数据变化时,UI能自动把变化反应出来。

在React出现时的背景来说是颠覆式创新。

举个例子,在当时如果要实现一个聊天应用,当来了一条新消息时,你需要通过DOM API把消息加到聊天框,同时要让显示未读消息的地方让数字加一,这样才能保持UI的一致性。

而如果使用React的话,你只需要在业务状态和UI状态之间建立一个绑定关系就可以了,不需要去直接操作修改UI,而是绑定完成后,React会在业务状态发生变化时,帮助我们去完成UI的变化。

1748909702006
1748909702006

React的基本概念#

基本概念就三个:

  • 组件
  • 状态
  • JSX

组件#

组件有两种

  • 原生组件 div、span等
  • 自定义组件 使用时必须大驼峰命名,如PageHeader
function CommentBox() {
return (
<div>
<CommentHeader />
<CommentList />
<CommentForm />
</div>
);
}

状态(state和props管理状态)#

根据React的核心机制,需要在状态变化时渲染UI,那就需要有保存状态的地方,在React中叫做state。

props是用来在父子组件之间传递状态的,类似于表单组件的传参属性概念。

用React函数组件举个state例子

import React from "react";
export default function Counter() {
const [count, setCount] = React.useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>{count}</button>
</div>
);
}

通过useState可以定义一个状态,和一个设置状态的函数。

点击Button ⇒ setCount更新count状态 ⇒ 更新视图渲染(count+1)

再举个state+props的例子

import React from "react";
function CountLabel({ count }) {
// 子组件用于显示颜色
const color = count > 10 ? "red" : "blue";
return <span style={{ color }}>{count}</span>;
}
export default function Counter() {
// 定义了 count 这个 state
const [count, setCount] = React.useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>
<CountLabel count={count} />
</button>
</div>
);
}
  1. 点击Button ⇒ setCount更新count状态
  2. count状态发生变化 ⇒ 作为props传入CountLabel
  3. CountLabel重新执行 + 渲染(根据count值对应不同的color颜色)

React和Vue的区别

React函数式:

  • 当props更新时,整个函数组件会重新执行
  • 函数内的所有代码都会重新运行
  • 创建新的变量和JSX元素
  • 完全重新渲染这个组件实例

Vue:

  • 组件实例会被保留
  • 只触发响应式系统的更新
  • 只重新计算依赖于变化的props的计算属性或方法
  • 智能地只更新需要变化的DOM部分

主要区别:

  • Vue更细粒度,只更新受影响的部分
  • React采用完全重新执行的方式,更符合函数式编程理念
  • Vue的响应式系统自动追踪依赖关系
  • React需要开发者主动考虑性能优化(如使用useMemo、useCallback等)

JSX语法本质#

JSX 的本质是什么,它和 JS 之间到底是什么关系?#

JSX本质是JavaScript的一种语法拓展, 但是它充分具备 JavaScript 的能力。

JSX 语法是如何在 JavaScript 中生效的?#

通过Babel将JSX转换成React.createElement(), React.createElement() 将返回一个叫作“React Element”的 JS 对象.转换就是在编译的过程中, 由Babel完成.

JSX是如何映射成DOM的#

JSX

import React from "react";
function CountLabel({ count }) {
// 子组件用于显示颜色
const color = count > 10 ? "red" : "blue";
return <span style={{ color }}>{count}</span>;
}
export default function Counter() {
// 定义了 count 这个 state
const [count, setCount] = React.useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>
<CountLabel count={count} />
</button>
</div>
);
}

JSX ⇒ JS

React.createElement(
"div",
null,
React.createElement(
"button",
{ onClick: function onClick() {
return setCount(count + 1);
} },
React.createElement(CountLabel, { count: count })
)
);

React.createElement介绍

最后通过ReactDOM.createRoot().render() 方法将这个React元素添加到DOM中。

在 React 18 中,ReactDOM.render()已被弃用,取而代之的是ReactDOM.createRoot().render():

总结(JSX到真实DOM的流程)#

  1. 通过Babel将JSX转换成JS
  2. 用React.createElement来创建用来描述DOM元素的React元素
  3. 最终会通过ReactDOM.createRoot().render()将React元素添加到真实DOM中。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

React是什么?
https://an2333.com/posts/framework/react/react是什么/
作者
Annan
发布于
2025-06-03
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Annan
写点前端,聊点 AI。
公告
博客已迁移到 Astro + Firefly,旧文章正在陆续搬家中。
分类
标签
站点统计
文章
50
分类
7
标签
28
总字数
84,160
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录