React简介 #

一、什么是React #

React 是由 Facebook(现 Meta)开发并开源的用于构建用户界面的 JavaScript 库。它专注于视图层,采用声明式编程范式,让开发者可以轻松创建交互式 UI。

1.1 核心定位 #

text
React = 声明式 UI 库 + 组件化架构

React 的核心思想:

  • 声明式:描述 UI 应该是什么样子,而不是如何实现
  • 组件化:将 UI 拆分为独立、可复用的组件
  • 一次学习,随处编写:Web、移动端、桌面应用

1.2 核心特点 #

特点 说明
声明式设计 只需描述 UI 状态,React 负责更新 DOM
组件化 构建可复用的组件,组合成复杂界面
一次学习,随处编写 支持 Web、React Native、Electron 等
单向数据流 数据从父组件流向子组件,易于调试
虚拟DOM 高效的 DOM 更新机制
JSX JavaScript 的语法扩展,描述 UI 结构

二、核心概念 #

2.1 虚拟DOM #

虚拟DOM(Virtual DOM)是 React 的核心特性之一:

text
┌─────────────┐
│   State     │  状态变化
└──────┬──────┘
       ↓
┌─────────────┐
│ Virtual DOM │  生成新的虚拟DOM树
└──────┬──────┘
       ↓ Diff算法
┌─────────────┐
│   Diffing   │  对比新旧虚拟DOM
└──────┬──────┘
       ↓ 最小更新
┌─────────────┐
│  Real DOM   │  只更新变化的部分
└─────────────┘

优势

  • 减少 DOM 操作次数
  • 批量更新提高性能
  • 跨平台能力

2.2 组件化 #

React 应用由组件构成:

jsx
function App() {
  return (
    <div>
      <Header />
      <Main>
        <Sidebar />
        <Content />
      </Main>
      <Footer />
    </div>
  );
}

组件特点:

  • 独立性:每个组件管理自己的状态和逻辑
  • 可复用:组件可在不同地方重复使用
  • 可组合:小组件组合成大组件
  • 可测试:独立组件易于测试

2.3 单向数据流 #

React 采用单向数据流:

text
┌─────────────┐
│  父组件     │
│   Props     │
└──────┬──────┘
       ↓ 单向传递
┌─────────────┐
│  子组件     │
└─────────────┘

数据流动规则:

  • Props 从父组件传递给子组件
  • 子组件不能直接修改 Props
  • 通过回调函数向父组件传递数据

2.4 声明式编程 #

对比命令式与声明式:

javascript
// 命令式(jQuery风格)
$('#counter').text(count);
$('#button').on('click', () => {
  count++;
  $('#counter').text(count);
});

// 声明式(React风格)
function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <span>{count}</span>
      <button onClick={() => setCount(count + 1)}>
        增加
      </button>
    </div>
  );
}

三、React 18 新特性 #

3.1 并发特性 #

React 18 引入了并发渲染:

javascript
import { createRoot } from 'react-dom/client';

const root = createRoot(document.getElementById('root'));
root.render(<App />);

3.2 主要新特性 #

特性 说明
Concurrent Rendering 并发渲染,不阻塞主线程
Automatic Batching 自动批处理状态更新
Transitions 区分紧急和非紧急更新
Suspense 改进的数据获取体验
useId 生成唯一 ID

3.3 Transitions 示例 #

javascript
import { useState, useTransition } from 'react';

function SearchComponent() {
  const [isPending, startTransition] = useTransition();
  const [query, setQuery] = useState('');
  const [results, setResults] = useState([]);

  const handleChange = (e) => {
    const value = e.target.value;
    setQuery(value);
    
    startTransition(() => {
      setResults(searchResults(value));
    });
  };

  return (
    <div>
      <input value={query} onChange={handleChange} />
      {isPending && <span>搜索中...</span>}
      <Results data={results} />
    </div>
  );
}

四、应用场景 #

4.1 单页应用(SPA) #

text
适合构建复杂的单页应用程序
- 管理后台
- 电商平台
- 社交应用
- 数据可视化平台

4.2 移动应用 #

React Native 使用 React 构建原生移动应用:

javascript
import { Text, View } from 'react-native';

function App() {
  return (
    <View>
      <Text>Hello React Native!</Text>
    </View>
  );
}

4.3 桌面应用 #

Electron + React 构建跨平台桌面应用:

text
知名案例
- VS Code
- Slack
- Discord

4.4 服务端渲染 #

Next.js 等框架支持 SSR:

javascript
export async function getServerSideProps() {
  const data = await fetchData();
  return { props: { data } };
}

五、与其他框架对比 #

5.1 React vs Vue #

方面 React Vue
学习曲线 较陡峭 较平缓
模板语法 JSX HTML模板
状态管理 Redux/Zustand Pinia/Vuex
生态系统 社区驱动 官方维护
灵活性 中等
TypeScript 完善支持 完善支持

5.2 React vs Angular #

方面 React Angular
框架定位 UI库 完整框架
学习难度 中等 较高
TypeScript 可选 必须
数据绑定 单向 双向
适用场景 中小型项目 大型企业项目

5.3 React vs Svelte #

方面 React Svelte
编译时 运行时 编译时
包体积 较大 极小
学习曲线 中等 简单
生态成熟度 成熟 发展中

六、技术栈概览 #

6.1 核心技术栈 #

text
┌──────────────────────────────────────┐
│              React 18                │
├──────────────────────────────────────┤
│  React Router  │    Redux Toolkit    │
│  (路由管理)    │    (状态管理)        │
├──────────────────────────────────────┤
│  Vite/Webpack  │    Jest/Vitest      │
│  (构建工具)    │    (测试框架)        │
└──────────────────────────────────────┘

6.2 开发工具 #

  • React DevTools:浏览器开发者工具扩展
  • VS Code:推荐编辑器
  • ESLint + Prettier:代码规范工具
  • Vite:新一代构建工具

七、学习路线 #

text
基础阶段
├── React基础语法
├── JSX与组件
├── Props与State
└── 事件处理

进阶阶段
├── React Hooks
├── 组件通信
├── React Router
└── 状态管理

高级阶段
├── 性能优化
├── 自定义Hooks
├── 高阶组件
└── TypeScript集成

八、总结 #

React 是一款优秀的 UI 库:

  • 声明式:描述 UI,而非操作 DOM
  • 组件化:构建可复用的 UI 组件
  • 高效:虚拟DOM 实现高性能更新
  • 生态丰富:庞大的社区和第三方库

选择 React 的理由:

  • 学习资源丰富,社区活跃
  • 灵活性高,可搭配各种库
  • 就业市场广阔,需求量大
  • 跨平台能力,一套技能多端开发
最后更新:2026-03-26