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
- 减少手动
useMemo、useCallback需求 - 编译时优化
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 18 | React 19 |
|---|---|---|
| 并发渲染 | 实验性/部分 | 更稳定/扩展 |
| 服务器组件 | 实验性 | 稳定 |
| 数据获取 | Suspense + 外部库 | 内置 Actions |
| 性能优化 | 手动优化为主 | 编译器自动优化 |
| 包体积 | 相对较大 | 进一步优化 |
升级建议
从 React 17 → 18:
- 更新根 API 使用
createRoot - 利用并发特性优化性能
- 实施自动批处理
从 React 18 → 19:
- 准备服务器组件架构
- 试用 React Compiler
- 迁移到 Actions API
- 利用新的资源加载策略
注意事项
- React 19 移除对 IE 的支持
- 更严格的严格模式(开发模式下双重调用函数)
- 部分 已弃用 API 被移除
目前 React 19 仍在开发中,建议关注官方博客获取最新信息。对于新项目,可以从 React 18 开始,逐步采用新特性。