Skip to content

React简介与特点

第一章:React概述

1.1 React是什么

React是一个用于构建用户界面的JavaScript库,由Facebook(现Meta)于2013年开源。它专注于视图层(UI层),采用组件化的开发模式,让开发者能够构建大型、复杂的Web应用。

React的定位

React不是一个完整的框架,而是一个专注于UI的库:

完整框架(如Angular):
UI层 + 路由 + 状态管理 + HTTP客户端 + 表单验证 + ...

React:
UI层(核心)+ 生态系统(可选)

这种设计哲学让React具有极大的灵活性,开发者可以根据需求选择其他工具:

  • 路由:React Router、TanStack Router
  • 状态管理:Redux、Zustand、Jotai
  • 数据获取:TanStack Query、SWR
  • 表单:React Hook Form、Formik

React的核心理念

React的设计基于几个核心理念:

  1. 声明式UI
javascript
// 命令式(传统DOM操作)
const button = document.createElement('button');
button.textContent = 'Click me';
button.onclick = function() {
  alert('Clicked!');
};
document.body.appendChild(button);

// 声明式(React)
function Button() {
  return (
    <button onClick={() => alert('Clicked!')}>
      Click me
    </button>
  );
}

声明式编程的优势:

  • 代码更易读懂
  • 更容易推理应用状态
  • 减少bug产生
  • 更好的开发体验
  1. 组件化
javascript
// 将UI拆分为独立的组件
function App() {
  return (
    <div>
      <Header />
      <Sidebar />
      <MainContent />
      <Footer />
    </div>
  );
}

function Header() {
  return (
    <header>
      <Logo />
      <Navigation />
      <UserMenu />
    </header>
  );
}

组件化的好处:

  • 代码复用
  • 关注点分离
  • 易于维护
  • 团队协作
  1. 单向数据流
javascript
// 数据从父组件流向子组件
function Parent() {
  const [data, setData] = useState("Hello");
  
  return <Child message={data} />;
}

function Child({ message }) {
  return <div>{message}</div>;
}

// 子组件通过回调通知父组件
function Parent() {
  const [count, setCount] = useState(0);
  
  return <Child onIncrement={() => setCount(count + 1)} />;
}

function Child({ onIncrement }) {
  return <button onClick={onIncrement}>Increment</button>;
}

单向数据流的优势:

  • 数据流向清晰
  • 易于调试
  • 可预测性强
  • 避免数据混乱
  1. 虚拟DOM
真实DOM更新流程:
JavaScript修改数据 
  → 直接操作DOM 
  → 浏览器重排重绘 
  → 性能消耗大

虚拟DOM流程:
JavaScript修改数据 
  → 更新虚拟DOM 
  → Diff算法找出差异 
  → 批量更新真实DOM 
  → 性能优化

1.2 React的历史与发展

创建背景

2011年,Facebook的News Feed功能变得越来越复杂,传统的MVC架构难以维护。工程师Jordan Walke创建了FaxJS(React的前身),引入了组件化和虚拟DOM的概念。

重要版本历史

React 0.x(2013年)

  • 首次开源发布
  • 引入JSX语法
  • 组件化开发模式
  • 虚拟DOM机制

React 0.14(2015年)

  • 拆分react和react-dom
  • 引入无状态函数组件
  • 引入ref API

React 15(2016年)

  • 改进SVG支持
  • 优化服务端渲染
  • 移除部分已废弃的API

React 16(2017年)

  • Fiber架构重写核心
  • 错误边界(Error Boundaries)
  • Portals
  • Fragment
  • 改进的服务端渲染

React 16.3(2018年)

  • 新的Context API
  • 新的生命周期方法
  • StrictMode

React 16.8(2019年)

  • Hooks发布(革命性更新)
  • useState、useEffect等基础Hooks
  • 函数组件成为主流

React 17(2020年)

  • 无新特性版本
  • 新的JSX Transform
  • 事件委托改进
  • 支持渐进式升级

React 18(2022年)

  • Concurrent Rendering
  • Automatic Batching
  • useTransition、useDeferredValue
  • Suspense改进
  • Streaming SSR

React 19(2024年)

  • use() Hook
  • Server Components稳定版
  • Server Actions
  • useActionState、useOptimistic
  • React Compiler
  • Document Metadata API
  • ref as prop

1.3 React的核心特点

特点1:声明式编程

React使用声明式方式描述UI,让代码更可预测、更容易调试。

传统命令式编程:

javascript
// 命令式:告诉计算机如何做
const container = document.getElementById('root');
const header = document.createElement('h1');
header.textContent = 'Hello World';
container.appendChild(header);

const list = document.createElement('ul');
const items = ['Apple', 'Banana', 'Orange'];
items.forEach(item => {
  const li = document.createElement('li');
  li.textContent = item;
  list.appendChild(li);
});
container.appendChild(list);

React声明式编程:

javascript
// 声明式:描述想要什么
function App() {
  const items = ['Apple', 'Banana', 'Orange'];
  
  return (
    <div>
      <h1>Hello World</h1>
      <ul>
        {items.map(item => (
          <li key={item}>{item}</li>
        ))}
      </ul>
    </div>
  );
}

声明式的优势:

  1. 代码更简洁:减少70%的代码量
  2. 更易理解:一眼看出UI结构
  3. 更少bug:无需手动维护DOM状态
  4. 更好的抽象:隐藏了DOM操作细节

特点2:组件化

组件是React的核心概念,将UI拆分为独立、可复用的部分。

组件的特点:

javascript
// 1. 独立性:每个组件都是独立的单元
function Button({ children, onClick }) {
  return <button onClick={onClick}>{children}</button>;
}

// 2. 可复用:组件可以在多处使用
function App() {
  return (
    <div>
      <Button onClick={() => alert('1')}>Button 1</Button>
      <Button onClick={() => alert('2')}>Button 2</Button>
      <Button onClick={() => alert('3')}>Button 3</Button>
    </div>
  );
}

// 3. 可组合:小组件组成大组件
function UserCard({ user }) {
  return (
    <div className="card">
      <Avatar src={user.avatar} />
      <UserInfo name={user.name} email={user.email} />
      <ActionButtons userId={user.id} />
    </div>
  );
}

// 4. 封装性:内部实现细节隐藏
function SearchBar() {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState([]);
  
  // 内部状态和逻辑
  const handleSearch = async () => {
    const data = await searchAPI(query);
    setResults(data);
  };
  
  // 对外只暴露UI
  return (
    <div>
      <input value={query} onChange={e => setQuery(e.target.value)} />
      <button onClick={handleSearch}>Search</button>
      <ResultsList results={results} />
    </div>
  );
}

组件的类型:

  1. 函数组件(推荐)
javascript
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// 或使用箭头函数
const Welcome = ({ name }) => {
  return <h1>Hello, {name}</h1>;
};
  1. 类组件(遗留)
javascript
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

在React 19中,函数组件是绝对主流,类组件主要用于维护旧代码。

特点3:虚拟DOM

虚拟DOM是React性能优化的核心机制。

虚拟DOM的工作原理:

1. 创建虚拟DOM树
   JavaScript对象表示DOM结构

2. 数据变化时创建新的虚拟DOM树

3. Diff算法比较新旧虚拟DOM
   找出最小变更集

4. 批量更新真实DOM
   只更新必要的部分

代码示例:

javascript
// 虚拟DOM的简化表示
const vdom = {
  type: 'div',
  props: {
    className: 'container',
    children: [
      {
        type: 'h1',
        props: {
          children: 'Hello World'
        }
      },
      {
        type: 'p',
        props: {
          children: 'This is a paragraph'
        }
      }
    ]
  }
};

// React的JSX会被转换为类似结构
<div className="container">
  <h1>Hello World</h1>
  <p>This is a paragraph</p>
</div>

// 转换后(简化版)
React.createElement(
  'div',
  { className: 'container' },
  React.createElement('h1', null, 'Hello World'),
  React.createElement('p', null, 'This is a paragraph')
);

性能对比:

javascript
// 场景:更新1000个列表项中的1个

// 传统DOM操作
for (let i = 0; i < 1000; i++) {
  document.querySelectorAll('li')[i].textContent = items[i];
}
// 性能:1000次DOM操作

// React虚拟DOM
setItems(newItems);
// 性能:Diff算法识别出只有1个变化,只进行1次DOM操作

Diff算法优化策略:

  1. 同层比较
只比较同一层级的节点,不跨层比较
时间复杂度:O(n) 而不是 O(n³)
  1. 类型比较
不同类型的元素会产生不同的树
直接替换而不是修改
  1. key的作用
javascript
// 没有key:React无法识别具体是哪个元素
<ul>
  {items.map(item => <li>{item}</li>)}
</ul>

// 有key:React可以精确追踪每个元素
<ul>
  {items.map(item => <li key={item.id}>{item.name}</li>)}
</ul>

特点4:单向数据流

React采用单向数据流(Unidirectional Data Flow),数据从父组件流向子组件。

数据流示意:

javascript
// 父组件
function Parent() {
  const [message, setMessage] = useState("Hello");
  
  return (
    <div>
      <Child message={message} />
      <button onClick={() => setMessage("Hi")}>Change</button>
    </div>
  );
}

// 子组件只能读取props
function Child({ message }) {
  // 不能直接修改props
  // message = "Changed"; // 错误!
  
  return <div>{message}</div>;
}

// 子组件通过回调通知父组件
function Parent() {
  const [count, setCount] = useState(0);
  
  return <Child count={count} onIncrement={() => setCount(count + 1)} />;
}

function Child({ count, onIncrement }) {
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={onIncrement}>+1</button>
    </div>
  );
}

单向数据流的优点:

  1. 可预测性

    • 数据流向明确
    • 容易追踪数据变化
    • 调试更容易
  2. 可维护性

    • 组件职责清晰
    • 修改影响范围可控
    • 重构更安全
  3. 可测试性

    • 组件输入输出明确
    • 纯函数易于测试
    • 模拟数据简单

1.4 React与其他框架对比

React vs Vue

javascript
// React实现
function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
}

// Vue实现
<template>
  <div>
    <p>{{ count }}</p>
    <button @click="count++">+1</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  }
}
</script>

对比分析:

学习曲线:
Vue:  ⭐⭐⭐⭐⭐ (更平缓)
React:⭐⭐⭐⭐   (需要理解JavaScript)

灵活性:
Vue:  ⭐⭐⭐⭐   (渐进式框架)
React:⭐⭐⭐⭐⭐ (高度灵活)

生态系统:
Vue:  ⭐⭐⭐⭐   (完善)
React:⭐⭐⭐⭐⭐ (最丰富)

性能:
Vue:  ⭐⭐⭐⭐⭐ (响应式系统优化)
React:⭐⭐⭐⭐   (虚拟DOM优化)

TypeScript支持:
Vue:  ⭐⭐⭐⭐   (Vue 3改进)
React:⭐⭐⭐⭐⭐ (原生友好)

移动端:
Vue:  ⭐⭐⭐     (Weex)
React:⭐⭐⭐⭐⭐ (React Native)

React vs Angular

typescript
// React实现
function TodoList() {
  const [todos, setTodos] = useState([]);
  
  const addTodo = (text) => {
    setTodos([...todos, { id: Date.now(), text }]);
  };
  
  return (
    <div>
      {todos.map(todo => (
        <div key={todo.id}>{todo.text}</div>
      ))}
    </div>
  );
}

// Angular实现
@Component({
  selector: 'todo-list',
  template: `
    <div>
      <div *ngFor="let todo of todos">{{todo.text}}</div>
    </div>
  `
})
export class TodoListComponent {
  todos: Todo[] = [];
  
  addTodo(text: string) {
    this.todos.push({ id: Date.now(), text });
  }
}

对比分析:

架构:
Angular:完整的MVC框架
React:  UI库 + 生态系统

学习曲线:
Angular:陡峭(需学习RxJS、依赖注入等)
React:  相对平缓(主要是JavaScript)

灵活性:
Angular:约定大于配置
React:  高度灵活

包体积:
Angular:较大(约500KB)
React:  较小(约140KB)

适用场景:
Angular:大型企业应用
React:  各种规模的应用

React vs Svelte

javascript
// React实现
function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}

// Svelte实现
<script>
  let count = 0;
</script>

<button on:click={() => count += 1}>
  Count: {count}
</button>

对比分析:

编译方式:
Svelte:编译时优化,无运行时
React: 运行时库

包体积:
Svelte:极小(10-20KB)
React: 中等(140KB)

性能:
Svelte:编译后性能极佳
React: 虚拟DOM有小开销

生态系统:
Svelte:较新,生态在成长
React: 最成熟,生态最丰富

学习曲线:
Svelte:简单直观
React: 需要JavaScript基础

第二章:React的设计哲学

2.1 组合优于继承

React推荐使用组合而不是继承来复用组件逻辑。

组合示例

javascript
// 使用组合构建复杂组件
function Dialog({ title, children, footer }) {
  return (
    <div className="dialog">
      <div className="dialog-title">{title}</div>
      <div className="dialog-content">{children}</div>
      <div className="dialog-footer">{footer}</div>
    </div>
  );
}

// 使用
function WelcomeDialog() {
  return (
    <Dialog
      title="Welcome"
      footer={<button>Close</button>}
    >
      <p>Thank you for visiting!</p>
    </Dialog>
  );
}

// 特殊化组件
function ConfirmDialog({ message, onConfirm, onCancel }) {
  return (
    <Dialog
      title="Confirm"
      footer={
        <>
          <button onClick={onConfirm}>Yes</button>
          <button onClick={onCancel}>No</button>
        </>
      }
    >
      <p>{message}</p>
    </Dialog>
  );
}

为什么不用继承

javascript
// React不推荐使用继承

// 不推荐:基类组件
class BaseComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = { loading: false };
  }
  
  setLoading(loading) {
    this.setState({ loading });
  }
}

class UserList extends BaseComponent {
  // 继承BaseComponent
  render() {
    return this.state.loading ? <Spinner /> : <Users />;
  }
}

// 推荐:使用Hooks和组合
function useLoading() {
  const [loading, setLoading] = useState(false);
  return [loading, setLoading];
}

function UserList() {
  const [loading, setLoading] = useLoading();
  
  return loading ? <Spinner /> : <Users />;
}

2.2 关注点分离

React的关注点分离不是按技术分离(HTML/CSS/JS),而是按功能分离。

javascript
// 传统方式:按技术分离
// user.html
<div id="user-profile"></div>

// user.css
#user-profile {
  padding: 20px;
}

// user.js
document.getElementById('user-profile').innerHTML = userData;

// React方式:按功能分离
// UserProfile.jsx(功能单元)
function UserProfile({ user }) {
  const styles = {
    padding: '20px'
  };
  
  return (
    <div style={styles}>
      <h2>{user.name}</h2>
      <p>{user.email}</p>
    </div>
  );
}

优势:

  • 组件内聚合度高
  • 易于复用
  • 修改影响范围小
  • 删除组件时相关代码一起删除

2.3 Learn Once, Write Anywhere

React的理念是"学一次,到处写",而不是"写一次,到处运行"。

javascript
// React核心概念在所有平台通用
function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <view>
      <text>{count}</text>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </view>
  );
}

// Web平台:使用react-dom
import { createRoot } from 'react-dom/client';
createRoot(document.getElementById('root')).render(<Counter />);

// 移动平台:使用react-native
import { AppRegistry } from 'react-native';
AppRegistry.registerComponent('Counter', () => Counter);

// VR平台:使用react-360
import { AppRegistry } from 'react-360';
AppRegistry.registerComponent('Counter', () => Counter);

第三章:React的技术优势

3.1 开发效率

热模块替换(HMR)

javascript
// 开发时修改代码,页面自动更新,状态保持
function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
}

// 修改按钮文字后,count状态保持不变

强大的开发工具

  1. React DevTools
查看组件树
检查Props和State
追踪组件更新
性能分析
  1. 错误提示
javascript
// React提供友好的错误信息
function App() {
  const [user, setUser] = useState(null);
  
  return <div>{user.name}</div>;
}
// 运行时错误:
// Cannot read property 'name' of null
// 在 App 组件
  1. 严格模式
javascript
// 帮助发现潜在问题
import React from 'react';
import ReactDOM from 'react-dom/client';

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

3.2 性能优势

React 19的性能改进

  1. 自动批处理
javascript
// React 19自动批处理所有更新
function handleClick() {
  setCount(count + 1);    // 不会立即重渲染
  setFlag(!flag);         // 不会立即重渲染
  setData(newData);       // 批处理后只重渲染一次
}

// 即使在异步中也会批处理
setTimeout(() => {
  setCount(count + 1);
  setFlag(!flag);
  // React 19会批处理这些更新
}, 1000);
  1. React Compiler
javascript
// 以前需要手动优化
const MemoizedComponent = React.memo(Component);
const memoizedValue = useMemo(() => compute(a, b), [a, b]);
const memoizedCallback = useCallback(() => { doSomething(); }, []);

// React 19 Compiler自动优化
function Component({ a, b }) {
  const value = compute(a, b);     // 自动memoization
  const callback = () => {         // 自动memoization
    doSomething();
  };
  
  return <div>{value}</div>;
}
  1. Server Components
javascript
// 服务器组件:不发送JavaScript到客户端
async function ProductList() {
  const products = await db.query('SELECT * FROM products');
  
  return (
    <div>
      {products.map(product => (
        <ProductCard key={product.id} product={product} />
      ))}
    </div>
  );
}

// 性能提升:
// - JavaScript包体积减少
// - 首屏加载更快
// - SEO更好

3.3 可维护性

类型安全

typescript
// TypeScript与React完美集成
interface UserProps {
  name: string;
  age: number;
  email?: string;
}

const UserProfile: React.FC<UserProps> = ({ name, age, email }) => {
  return (
    <div>
      <h2>{name}</h2>
      <p>{age} years old</p>
      {email && <p>{email}</p>}
    </div>
  );
};

// 使用时类型检查
<UserProfile name="Alice" age={25} /> // OK
<UserProfile name="Alice" age="25" /> // 类型错误

测试友好

javascript
// React组件易于测试
import { render, screen, fireEvent } from '@testing-library/react';

function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
}

// 测试
test('Counter increments', () => {
  render(<Counter />);
  
  const button = screen.getByText('+1');
  fireEvent.click(button);
  
  expect(screen.getByText('Count: 1')).toBeInTheDocument();
});

3.4 生态系统优势

丰富的库和工具

路由:
- React Router(100万+周下载)
- TanStack Router

状态管理:
- Redux(300万+周下载)
- Zustand(200万+周下载)
- Jotai、Recoil

UI组件库:
- Material-UI(400万+周下载)
- Ant Design(150万+周下载)
- Chakra UI、shadcn/ui

数据获取:
- TanStack Query(200万+周下载)
- SWR(50万+周下载)
- Apollo Client

表单:
- React Hook Form(300万+周下载)
- Formik

动画:
- Framer Motion(80万+周下载)
- React Spring

测试:
- Jest
- React Testing Library
- Cypress、Playwright

全栈框架

javascript
// Next.js - 最流行的React全栈框架
// app/page.js
async function HomePage() {
  const data = await fetch('https://api.example.com/data');
  return <div>{data.title}</div>;
}

// Remix - 现代全栈框架
export async function loader() {
  return json({ data: await getData() });
}

export default function Route() {
  const { data } = useLoaderData();
  return <div>{data}</div>;
}

第四章:React的应用场景

4.1 单页应用(SPA)

javascript
// 典型的React SPA结构
import { BrowserRouter, Routes, Route } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Layout>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/products" element={<Products />} />
          <Route path="/contact" element={<Contact />} />
        </Routes>
      </Layout>
    </BrowserRouter>
  );
}

适用场景:

  • 后台管理系统
  • 数据可视化平台
  • 社交媒体应用
  • 在线工具

4.2 服务端渲染(SSR)

javascript
// Next.js服务端渲染
export async function getServerSideProps() {
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();
  
  return {
    props: { data }
  };
}

export default function Page({ data }) {
  return <div>{data.title}</div>;
}

适用场景:

  • 电商网站(SEO需求)
  • 新闻媒体网站
  • 博客平台
  • 营销页面

4.3 静态站点生成(SSG)

javascript
// Next.js静态生成
export async function getStaticProps() {
  const posts = await getPosts();
  
  return {
    props: { posts },
    revalidate: 60 // ISR:每60秒重新生成
  };
}

export default function Blog({ posts }) {
  return (
    <div>
      {posts.map(post => (
        <article key={post.id}>
          <h2>{post.title}</h2>
          <p>{post.excerpt}</p>
        </article>
      ))}
    </div>
  );
}

适用场景:

  • 个人博客
  • 文档网站
  • 企业官网
  • 营销落地页

4.4 移动应用

javascript
// React Native
import { View, Text, Button } from 'react-native';

function App() {
  const [count, setCount] = useState(0);
  
  return (
    <View>
      <Text>Count: {count}</Text>
      <Button
        title="Increment"
        onPress={() => setCount(count + 1)}
      />
    </View>
  );
}

适用场景:

  • iOS应用
  • Android应用
  • 跨平台移动应用

4.5 桌面应用

javascript
// Electron + React
function App() {
  const handleOpen = () => {
    window.electronAPI.openFile();
  };
  
  return (
    <div>
      <button onClick={handleOpen}>Open File</button>
    </div>
  );
}

适用场景:

  • VS Code扩展
  • Slack、Discord等应用
  • 生产力工具
  • 跨平台桌面软件

第五章:React的学习路径

5.1 前置知识要求

必备知识

  1. HTML/CSS基础
html
<!-- HTML5语义化标签 -->
<header>
  <nav>
    <ul>
      <li><a href="/">Home</a></li>
    </ul>
  </nav>
</header>

<main>
  <section>
    <article>Content</article>
  </section>
</main>

<footer>
  <p>Copyright 2024</p>
</footer>
css
/* CSS3基础 */
.container {
  display: flex;
  justify-content: center;
  align-items: center;
}

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
  1. JavaScript ES6+
javascript
// 必须掌握的JavaScript特性
const arrow = () => {};
const { name } = user;
const [...rest] = array;
const obj = { ...other };
async function fetch() {}
import { Component } from 'react';
  1. DOM基础
javascript
// 理解DOM操作(即使React帮你做了)
document.querySelector('.btn');
element.addEventListener('click', handler);
element.classList.add('active');

推荐知识

  1. TypeScript
  2. 构建工具基础(Webpack、Vite)
  3. Git版本控制
  4. 命令行基础

5.2 学习阶段规划

第一阶段:基础入门(1-2周)

目标:理解React核心概念

学习内容:
1. JSX语法
2. 组件概念
3. Props传递
4. State状态
5. 事件处理
6. 条件渲染
7. 列表渲染

实践项目:
- 计数器
- Todo List
- 简单表单

第二阶段:Hooks掌握(2-3周)

目标:熟练使用Hooks

学习内容:
1. useState
2. useEffect
3. useContext
4. useReducer
5. useMemo、useCallback
6. useRef
7. 自定义Hooks

实践项目:
- 带过滤的Todo List
- 天气应用
- 简单博客

第三阶段:生态系统(3-4周)

目标:掌握常用库

学习内容:
1. React Router
2. 状态管理(Redux/Zustand)
3. 数据获取(TanStack Query/SWR)
4. 表单处理(React Hook Form)
5. UI库(Ant Design/Material-UI)

实践项目:
- 多页面应用
- 数据Dashboard
- 电商前台

第四阶段:React 19新特性(2-3周)

目标:掌握最新特性

学习内容:
1. use() Hook
2. Server Components
3. Server Actions
4. useActionState
5. useOptimistic
6. React Compiler

实践项目:
- 使用Server Components的博客
- 表单处理应用

第五阶段:性能优化(2周)

目标:优化应用性能

学习内容:
1. React.memo
2. 代码分割
3. 懒加载
4. 虚拟列表
5. 性能分析工具

实践项目:
- 性能优化实战

第六阶段:全栈开发(4周)

目标:构建全栈应用

学习内容:
1. Next.js框架
2. SSR/SSG
3. API Routes
4. 数据库集成
5. 认证授权
6. 部署上线

实践项目:
- 全栈博客系统
- 电商管理后台

5.3 学习资源推荐

官方资源

1. React官方文档
   https://react.dev
   - 最权威的学习资料
   - 包含互动教程
   - 定期更新

2. React官方博客
   https://react.dev/blog
   - 版本发布说明
   - 新特性介绍
   - 最佳实践

3. React GitHub
   https://github.com/facebook/react
   - 源码学习
   - Issue讨论
   - RFC提案

视频教程

英文资源:
- freeCodeCamp
- Traversy Media
- Web Dev Simplified
- Jack Herrington

中文资源:
- 峰华前端工程师
- 技术胖
- coderwhy

在线平台

1. CodeSandbox
   https://codesandbox.io
   - 在线编写React
   - 无需本地环境

2. StackBlitz
   https://stackblitz.com
   - WebContainer技术
   - 完整开发环境

3. React官方playground
   https://react.dev/learn

总结

本章全面介绍了React的简介与特点:

  1. React是什么:专注UI的JavaScript库
  2. 核心理念:声明式、组件化、单向数据流
  3. 发展历史:从2013到2024的演进
  4. 核心特点:虚拟DOM、JSX、Hooks
  5. 框架对比:React vs Vue vs Angular vs Svelte
  6. 设计哲学:组合优于继承、关注点分离
  7. 技术优势:开发效率、性能、可维护性
  8. 应用场景:SPA、SSR、SSG、移动端、桌面
  9. 学习路径:6个阶段的学习规划

现在你已经了解了React的全貌,接下来我们将学习如何搭建React开发环境。