React 18 和 19 有哪些新特性

39 阅读2分钟

React 18 和 19 带来了许多重要更新,以下是核心特性的详细对比:

React 18 主要特性

1. 并发特性(Concurrent Features)

// 使用并发渲染
import { startTransition } from 'react';

// 非紧急更新使用 startTransition
startTransition(() => {
  setSearchQuery(input); // 这个更新可以被中断
});

2. 新的根 API

// React 18 之前
ReactDOM.render(<App />, document.getElementById('root'));

// React 18 之后
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(<App />);

3. 自动批处理优化

  • 所有更新(包括 Promise、setTimeout 等)自动批处理
  • 减少不必要的重新渲染

4. 新的 Suspense 特性

<Suspense fallback={<Loading />}>
  <Component />
</Suspense>

5. 新的 Hooks

  • useId:生成唯一 ID
  • useTransition:标记非紧急更新
  • useDeferredValue:延迟更新值
  • useSyncExternalStore:外部存储集成
  • useInsertionEffect:CSS-in-JS 库使用

6. 流式 SSR(React Server Components 准备)

React 19 主要特性(截至2024年已知)

1. Actions(服务器和客户端)

// 服务端 Actions
async function handleSubmit(formData) {
  'use server';
  await saveData(formData);
}

// 客户端使用
<form action={handleSubmit}>
  <input name="data" />
  <button type="submit">提交</button>
</form>

2. React Compiler(优化编译器)

  • 自动 Memoization
  • 减少手动 useMemouseCallback 需求
  • 编译时优化

3. 增强的 use Hook

// 统一处理 Promise、context、资源
const data = use(promise);
const theme = use(ThemeContext);

4. 服务器组件稳定版

  • 默认服务器渲染
  • 减少客户端包体积
  • 直接访问后端资源

5. 资源加载优化

// 预加载资源
<link rel="preload" as="script" href="..." />

6. 文档元数据支持

// 在组件中直接设置
<title>页面标题</title>
<meta name="description" content="描述" />

7. 增强的 ref 和事件处理

  • 更简洁的 ref 访问
  • 改进的表单处理

8. Web Components 更好支持

重要变化对比

特性React 18React 19
并发渲染实验性/部分更稳定/扩展
服务器组件实验性稳定
数据获取Suspense + 外部库内置 Actions
性能优化手动优化为主编译器自动优化
包体积相对较大进一步优化

升级建议

从 React 17 → 18:

  1. 更新根 API 使用 createRoot
  2. 利用并发特性优化性能
  3. 实施自动批处理

从 React 18 → 19:

  1. 准备服务器组件架构
  2. 试用 React Compiler
  3. 迁移到 Actions API
  4. 利用新的资源加载策略

注意事项

  • React 19 移除对 IE 的支持
  • 更严格的严格模式(开发模式下双重调用函数)
  • 部分 已弃用 API 被移除

目前 React 19 仍在开发中,建议关注官方博客获取最新信息。对于新项目,可以从 React 18 开始,逐步采用新特性。