什么是React

在 AI 产品出海的技术选型中,前端框架的选择直接影响开发效率、团队招聘和项目长期维护成本。根据 Stack Overflow 2025 年开发者调查,React 以约 40% 的使用率稳居前端框架榜首,远超 Angular(17%)和 Vue(16%)。无论是 Meta 旗下的 Instagram、WhatsApp Web,还是 Netflix、Airbnb、Shopify 等全球化产品,都在大规模使用 React 构建用户界面。

理解 React 是什么、它的核心概念如何运作、生态有哪些工具链,是 AI 产品出海团队在技术选型阶段必须掌握的基础知识。

React 是什么

React 是 Meta(前 Facebook)于 2013 年开源的一个 JavaScript UI 库(library),用于构建用户界面。注意这里用的是「库」而不是「框架」——React 本身只负责视图层(View Layer)的渲染,不包含路由、状态管理、HTTP 请求等功能,这些能力需要借助第三方库来补充。

React 的核心设计理念可以用一句话概括:声明式地描述 UI,React 负责高效地更新视图

在传统的前端开发中,开发者需要手动操作 DOM 来更新界面——当数据变化时,用 document.getElementById 找到元素,再修改它的 innerHTML 或属性。这种方式在界面复杂时容易出错,也难以维护。React 改变了这种思路:你只需要告诉 React「当前数据是什么状态,UI 应该长什么样」,React 会自动计算差异并更新 DOM。

// 声明式:只需要描述 UI 应该长什么样
function Greeting({ name }) {
  return <h1>你好,{name}!</h1>
}

这段代码没有涉及任何 DOM 操作,只是描述了一个组件:接收一个 name 属性,渲染一段问候文字。React 会在底层负责将这段声明转换为真实的浏览器 DOM。

核心概念

React 的学习曲线相对平缓,但有几个核心概念需要理解清楚。

组件(Component)

组件是 React 最基本的构建单元。一个 React 应用就是由一个个组件嵌套组合而成的。组件本质上是一个 JavaScript 函数,接收输入(props),返回描述 UI 的 React 元素。

// 一个按钮组件
function Button({ label, onClick }) {
  return <button onClick={onClick}>{label}</button>
}
 
// 使用组件
<Button label="提交" onClick={handleSubmit} />

组件的核心价值在于复用性。一个设计良好的组件可以在不同页面、不同场景中反复使用,就像搭积木一样,用有限的积木块拼出复杂的结构。

JSX

JSX 是 React 引入的一种语法扩展,让你在 JavaScript 代码中直接编写类似 HTML 的标记。JSX 最终会被编译工具(如 Babel)转换为普通的 JavaScript 函数调用。

// JSX 写法
const element = <h1 className="title">Hello World</h1>
 
// 编译后等价于
const element = React.createElement('h1', { className: 'title' }, 'Hello World')

JSX 看起来像 HTML,但有几个关键区别:

  • 使用 className 代替 class(因为 class 是 JavaScript 保留字)
  • 使用 &#123;&#125; 嵌入 JavaScript 表达式
  • 标签必须闭合,单个标签要用 /> 结尾,如 &lt;img /&gt;
  • 事件处理使用驼峰命名,如 onClick 而不是 onclick

Props 与 State

Props 和 State 是 React 中管理数据的两个核心机制,它们决定了组件的渲染输出。

Props(属性) 是从父组件传递给子组件的数据,是只读的。子组件不能修改接收到的 props,这保证了数据流动的单向性和可预测性。

// 父组件传递 props
<UserCard name="张三" role="工程师" />
 
// 子组件接收并使用 props
function UserCard({ name, role }) {
  return (
    <div>
      <p>姓名:{name}</p>
      <p>角色:{role}</p>
    </div>
  )
}

State(状态) 是组件内部管理的可变数据。当 state 发生变化时,React 会自动重新渲染组件,更新对应的 DOM。

import { useState } from 'react'
 
function Counter() {
  const [count, setCount] = useState(0)  // 初始化状态
 
  return (
    <div>
      <p>点击次数:{count}</p>
      <button onClick={() => setCount(count + 1)}>点击</button>
    </div>
  )
}

每当用户点击按钮,setCount 会更新 count 的值,React 检测到 state 变化后自动重新渲染组件,页面上的数字也随之更新。

Hooks

Hooks 是 React 16.8(2019 年)引入的特性,让函数组件能够使用 state 和其他 React 特性(如生命周期)。在 Hooks 出现之前,只有 class 组件才能管理状态和响应生命周期事件。

常用的内置 Hooks 包括:

Hook用途示例场景
useState管理组件内部状态表单输入、计数器、开关切换
useEffect处理副作用(数据请求、订阅、DOM 操作)组件挂载时请求 API 数据
useContext消费 Context 提供的共享数据主题切换、用户登录态
useRef持有可变引用,不触发重新渲染获取 DOM 元素引用、保存定时器 ID
useMemo缓存计算结果,避免重复计算复杂列表过滤、大数据排序
useCallback缓存函数引用,避免不必要的子组件重渲染传递给子组件的回调函数
import { useState, useEffect } from 'react'
 
function UserProfile({ userId }) {
  const [user, setUser] = useState(null)
  const [loading, setLoading] = useState(true)
 
  useEffect(() => {
    // 副作用:组件挂载或 userId 变化时请求数据
    setLoading(true)
    fetch(`/api/users/${userId}`)
      .then(res => res.json())
      .then(data => {
        setUser(data)
        setLoading(false)
      })
  }, [userId])  // 依赖数组:userId 变化时重新执行
 
  if (loading) return <p>加载中...</p>
  return <p>用户名:{user.name}</p>
}

React 的工作原理

理解 React 的工作原理,有助于写出高性能的 React 应用。

虚拟 DOM(Virtual DOM)

虚拟 DOM 是 React 实现高效更新的核心机制。虚拟 DOM 本质上是真实 DOM 的轻量级 JavaScript 对象副本。

当组件的 state 发生变化时,React 的更新流程如下:

  1. React 重新调用组件函数,生成一棵新的虚拟 DOM 树
  2. React 将新的虚拟 DOM 树与旧的虚拟 DOM 树进行对比(这个过程叫做「Diff」或「协调」Reconciliation)
  3. React 计算出两棵树之间的最小差异
  4. React 只将差异部分应用到真实 DOM 上
流程图画布 · 115%
Mermaid 流程图加载中...

直接操作真实 DOM 是浏览器中性能开销较大的操作,因为每次 DOM 变更都可能触发浏览器的重排(Reflow)和重绘(Repaint)。虚拟 DOM 的价值在于:通过 JavaScript 层面的对比,把多次 DOM 变更合并为最少次数的真实 DOM 操作,从而提升渲染性能。

单向数据流

React 采用单向数据流(Unidirectional Data Flow):数据从父组件通过 props 流向子组件,子组件不能直接修改父组件的数据,只能通过回调函数通知父组件更新。

流程图画布 · 115%
Mermaid 流程图加载中...

单向数据流的好处是数据流向清晰可追踪。当界面出现异常时,你可以沿着 props 的传递链路向上排查,快速定位数据的来源。相比之下,双向数据绑定虽然写法简洁,但在大型应用中容易导致数据流向混乱,难以调试。

React 生态

React 本身只是一个视图层库,实际构建一个完整的前端应用需要组合多个生态工具。以下是 React 生态中最常用的工具链。

路由

React 自身不包含路由功能,社区中最主流的方案是 React Router。它提供了声明式的路由配置,支持嵌套路由、动态路由、路由守卫等能力。

import { BrowserRouter, Routes, Route } from 'react-router-dom'
 
function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="/users/:id" element={<UserProfile />} />
      </Routes>
    </BrowserRouter>
  )
}

状态管理

对于小型应用,React 内置的 useStateuseContext 通常就够用。当应用规模增大、共享状态增多时,可以引入第三方状态管理库:

  • Zustand:轻量、API 简洁,近年来增长迅速,适合中小型项目
  • Redux Toolkit:Redux 的官方简化版,适合大型应用和需要严格状态管理的场景
  • Jotai:原子化状态管理,按最小粒度拆分状态,适合细粒度响应式更新
  • Recoil:Meta 开发的原子化状态库,思路与 Jotai 类似

UI 组件库

使用成熟的 UI 组件库可以大幅加速开发,常见选择包括:

  • shadcn/ui:当前最热门的选择,提供可复制的组件源码,高度可定制
  • Ant Design:蚂蚁集团出品,企业级 UI 组件库,中后台项目常用
  • MUI(Material UI):Google Material Design 风格的组件库
  • Chakra UI:注重无障碍访问(Accessibility)的组件库
  • Tailwind CSS:严格来说不是组件库,而是 Utility-First CSS 框架,常与 shadcn/ui 搭配使用

数据请求

  • TanStack Query(原 React Query):服务端状态管理,处理缓存、重试、分页、乐观更新等
  • SWR:Vercel 开发的数据请求 Hooks 库,轻量且易用
  • Axios:HTTP 请求库,与 TanStack Query 或 SWR 搭配使用

框架级方案

如果不想从零组装工具链,可以选择基于 React 的全栈框架:

  • Next.js:最主流的 React 全栈框架,支持 SSR、SSG、API Routes、App Router,AI 产品出海项目的首选
  • Remix:强调 Web 标准和渐进增强,由 Shopify 维护
  • Gatsby:适合静态站点和内容驱动的网站

为什么 React 是前端主流选择

React 长期占据前端框架使用率榜首,背后有多方面原因。

庞大的社区与生态。React 拥有前端领域最大的开发者社区。GitHub 上 React 主仓库超过 23 万颗星,npm 周下载量数千万。这意味着你遇到的几乎任何问题,都能在 Stack Overflow、GitHub Issues 或社区博客中找到解答。丰富的第三方库和工具也让功能扩展变得容易。

就业市场需求旺盛。在全球主要招聘平台上,React 相关职位的数量远超 Vue 和 Angular。对于出海团队来说,选择 React 意味着更容易招到合适的开发者,降低人才招聘成本。

Meta 的持续投入。React 由 Meta 的专职工程团队维护,持续投入研发。从 Hooks(16.8)到 Concurrent Mode(18)再到 React Server Components(19),React 每隔一两年就会引入重要的架构级改进。这种持续演进的节奏保证了 React 不会停滞。

学习曲线友好。React 的核心 API 相对精简——函数组件、JSX、Hooks、条件渲染、列表渲染,掌握这些基本概念就能开始构建应用。相比 Angular 需要理解 TypeScript、装饰器、模块系统、依赖注入等一整套体系,React 的入门门槛明显更低。

跨平台能力。React 的学习成果可以复用到 React Native(移动端)、React Three Fiber(3D 图形)、Tauri / Electron(桌面应用)等平台。掌握 React 不仅限于 Web 前端,还能延伸到多端开发。

企业级验证。Netflix、Airbnb、Shopify、Uber、Dropbox、Discord 等公司在生产环境中大规模使用 React,证明了它在高流量、复杂业务场景下的可靠性和可扩展性。

三大框架对比

选择前端框架时,React、Vue、Angular 是最常被比较的三个选项。

维度ReactVueAngular
类型UI 库渐进式框架全功能框架
维护方Meta独立社区(尤雨溪创建)Google
模板语法JSX(JavaScript 扩展)模板(HTML 扩展)模板(HTML 扩展)
学习曲线中等(核心 API 精简,生态需自选)较低(文档友好,约定清晰)较高(概念多,体系完整)
状态管理自选(Zustand、Redux 等)Pinia / Vuex内置 Services + RxJS
路由自选(React Router)Vue Router(官方)Angular Router(内置)
类型支持可选 TypeScript可选 TypeScript默认 TypeScript
适用场景各类规模项目,尤其大型 SPA中小型项目,渐进式接入大型企业级应用
GitHub Stars~230k~210k~98k
2025 使用率~40%~16%~17%

核心概念对照

React 中的几个核心概念,在 Vue 和 Angular 中也有对应的实现方式。了解它们之间的对应关系,有助于在不同框架之间切换时快速适应。

React 概念Vue 对应Angular 对应说明
组件(Component)组件(Component)组件(Component)三者都以组件作为基本构建单元
JSX模板(Template)模板(Template)React 用 JS 写模板,Vue/Angular 用 HTML 扩展
PropsProps@Input()父向子传递数据
Stateref() / reactive()属性 / Signal组件内部可变数据
HooksComposablesServices / Directives逻辑复用机制
ContextProvide / InjectServices跨组件共享数据
useEffectwatch / watchEffectngOnInit / ngOnChanges副作用处理

Props 与 State 对比

Props 和 State 是 React 中两种不同的数据来源,理解它们的区别是掌握 React 数据流的关键。

对比维度PropsState
数据来源父组件传入组件内部定义
是否可修改只读(子组件不能修改)可变(通过 setter 函数更新)
更新触发父组件重新渲染时更新调用 setter 函数后触发重新渲染
初始值由父组件决定在 useState 中设置初始值
用途配置组件行为、传递数据管理组件内部交互状态
类比函数的参数函数内部的局部变量
function Toggle({ initialEnabled }) {  // props:来自外部
  const [enabled, setEnabled] = useState(initialEnabled)  // state:内部管理
 
  return (
    <button onClick={() => setEnabled(!enabled)}>
      {enabled ? '已开启' : '已关闭'}
    </button>
  )
}

Hooks 类型对照

Hooks 是现代 React 的核心。不同类型的 Hooks 解决不同的问题,了解它们的分类和用途有助于在实际开发中选择合适的 Hook。

Hook 类型代表 Hook用途注意事项
状态管理useState, useReducer管理组件内部可变数据useReducer 适合复杂状态逻辑
副作用处理useEffect数据请求、订阅、手动 DOM 操作注意依赖数组,避免无限循环
上下文消费useContext读取 Context 提供的共享数据适合全局主题、用户信息等
引用useRef获取 DOM 引用或保存可变值修改 ref.current 不触发重渲染
性能优化useMemo, useCallback缓存计算结果或函数引用不要过度使用,先测量再优化
自定义 HookuseXxx封装可复用的状态逻辑命名必须以 use 开头

实际案例

案例一:Instagram Web

Instagram 是全球最早大规模采用 React 的产品之一。早在 2014 年,Instagram 就将 Web 前端迁移到 React,团队在工程博客中写道:「React 让我们在构建复杂 UI 时能保持代码的可预测性。」Instagram Web 的 Feed 流、Stories、评论系统、消息功能等核心模块都使用 React 构建,利用组件化思想将复杂的社交界面拆解为可维护的独立模块。

案例二:Shopify 商家后台

Shopify 是全球领先的电商 SaaS 平台,其商家后台(Shopify Admin)完全使用 React 构建。Shopify 团队不仅大量使用 React,还开源了 Polaris 设计系统和 React 组件库,供生态内的开发者构建风格一致的 Shopify 应用。Shopify 选择 React 的核心理由是:组件化开发效率高、生态工具丰富、招聘市场上 React 开发者供给充足。

案例三:Notion

Notion 是一款全球化的协作工具,集成了文档、知识库、项目管理等功能。Notion 的前端基于 React 构建,利用 React 的组件化能力将编辑器、数据库视图、侧边栏、评论等复杂交互模块拆解为独立组件。Notion 的块编辑器(Block Editor)就是典型的 React 组件化设计——每个内容块(文本、表格、图片、代码)都是独立的 React 组件,可以拖拽、嵌套和自由组合。

检查清单

在项目中引入 React 之前,可以对照以下清单确认准备情况:

  1. Node.js 环境就绪:确认本地已安装 Node.js 20+ 和 pnpm / npm
  2. 构建工具选择:决定使用 Vite(轻量快速)还是 Next.js(全栈框架)
  3. TypeScript 配置:React 项目强烈建议使用 TypeScript,提前配置 tsconfig.json
  4. 代码规范工具:配置 ESLint 和 Prettier(或 Biome),保证团队代码风格一致
  5. 路由方案确定:纯 SPA 选 React Router,需要 SSR/SEO 选 Next.js
  6. 状态管理方案:小项目用 useState + useContext,中型项目考虑 Zustand,大型项目评估 Redux Toolkit
  7. UI 组件库选型:根据设计风格选择 shadcn/ui、Ant Design 或 MUI
  8. 数据请求方案:评估 TanStack Query 或 SWR 的适用性
  9. 目录结构规划:按功能模块组织 components/hooks/utils/pages/features/
  10. 测试策略:确定单元测试(Vitest)和 E2E 测试(Playwright)的覆盖范围
  11. 性能监控计划:准备 React DevTools Profiler 用于开发期性能分析
  12. 国际化支持:出海项目提前规划 i18n 方案(如 react-i18next 或 next-intl)

小结

React 是目前使用最广泛的前端 UI 库,它的声明式编程模型、组件化架构和虚拟 DOM 机制让构建复杂用户界面变得高效且可维护。对于 AI 产品出海团队来说,React 拥有庞大的社区生态、丰富的工具链、旺盛的就业市场需求和经过大规模产品验证的可靠性,是前端技术选型中值得优先考虑的方案。

掌握 React 的核心概念——组件、JSX、Props、State 和 Hooks——是学习 React 的第一步。在此基础上,再根据项目规模选择合适的路由、状态管理和 UI 组件库,就能搭建出一个完整的 React 应用。

参考资料

  1. React 官方文档 — React 最新的官方文档,包含交互式教程和 API 参考
  2. React 中文文档 — 官方中文版的快速入门指南
  3. MDN — React 入门 — Mozilla 开发者网络的 React 入门教程
  4. Instagram 工程博客 — React at Instagram — Instagram 团队分享的大规模采用 React 的实践经验
  5. Shopify Polaris — Shopify 开源的 React 组件库和设计系统
  6. State of JavaScript 2025 — Front-end Frameworks — 2025 年前端框架使用情况和开发者偏好调查
  7. Stack Overflow Developer Survey 2025 — 全球开发者调查,包含框架使用率数据
  8. Next.js 官方文档 — 基于 React 的全栈框架,AI 产品出海项目的推荐选择