本文档记录了在 Redux 核心基础之上构建的高级 Redux 模式和技术。这些模式将帮助您扩展应用程序、优化性能、管理复杂的状态转换以及处理复杂异步逻辑。
有关选择器和记忆化(memoization)的更多信息,请参阅 选择器与记忆化。有关规范化状态和优化数据结构的指南,请参阅 状态规范化与结构。有关中间件实现的详细模式,请参阅 中间件模式。
Redux 为状态管理提供了坚实的基础,但随着应用程序日益复杂,出现了额外的模式来帮助管理这种复杂性。
在处理异步逻辑时,Redux 通过不同的中间件选项支持多种范例,每种都有其自身的优势。
Redux Thunk 中间件流程
来源:docs/tutorials/essentials/part-5-async-logic.md88-91 docs/tutorials/essentials/part-5-async-logic.md106-130
比较异步方法
| 方法 | 复杂性 | 用例 | 调试 | 测试 |
|---|---|---|---|---|
| Thunks | 简单 | 基本异步,API 调用 | 直接,使用 Redux DevTools | 直接 |
| Sagas | 复杂 | 复杂流程,竞态条件 | 可追踪,分步执行 | 可独立测试 |
| Observable/Redux-Observable | 复杂 | 响应式,可取消 | 需要 RxJS 知识 | 需要 RxJS 测试模式 |
| Listeners | 中等 | 基于事件的响应 | 可追踪 | 可测试性好 |
来源:docs/tutorials/essentials/part-5-async-logic.md96-105 docs/faq/Actions.md30-36
对于需要转换或验证的复杂 Action,Redux Toolkit 的 createSlice 支持“准备回调”(prepare callbacks),以便在 dispatch 之前自定义 payload。
来源:docs/tutorials/essentials/part-4-using-data.md372-397 docs/tutorials/essentials/part-4-using-data.md398-424
Redux 要求进行不可变更新,当状态结构嵌套很深时,这可能会变得很复杂。一些技术可以帮助管理这种复杂性。
Immer(已集成到 Redux Toolkit 的 createSlice 中)允许您编写“可变”代码,这些代码会被安全地转换为正确的不可变更新。
来源:docs/tutorials/essentials/part-2-app-structure.md375-383 docs/style-guide/style-guide.md92-96
TypeScript 为 Redux 操作提供类型安全,有助于防止常见错误并提供开发者工具的好处。
来源:docs/tutorials/essentials/part-3-data-flow.md205-251 docs/tutorials/essentials/part-5-async-logic.md224-251
随着 Redux 应用程序的增长,性能优化变得越来越重要。
| 技术 | 描述 | 最佳用途 | 实现复杂度 |
|---|---|---|---|
| 记忆化 Selector | 缓存派生数据计算 | 复杂派生数据 | 中等 |
| 规范化状态 | 组织数据以提高访问效率 | 相关实体集合 | 中等 |
| 批量更新 | 合并多个更新 | 快速顺序更改 | 低 |
| 组件连接粒度 | 在较低的组件级别进行连接 | 大型 UI 树 | 中等 |
| 相等性比较 | 自定义相等性检查 | 深度或复杂对象 | 低到中 |
来源:docs/faq/Performance.md30-52 docs/usage/deriving-data-selectors.md19-29
来源:docs/tutorials/essentials/part-6-performance-normalization.md258-331 docs/usage/deriving-data-selectors.md95-137
Redux 提供了在 React 组件外部使用 store 数据或与外部系统集成的模式。
来源:docs/faq/CodeStructure.md114-121 docs/tutorials/essentials/part-8-rtk-query-advanced.md289-344
Redux store 配置可以针对各种高级需求进行自定义
来源:docs/tutorials/essentials/part-2-app-structure.md160-169 docs/tutorials/essentials/part-3-data-flow.md104-133
管理副作用是 Redux 应用程序的关键方面,有多种可用方法。
| 方法 | 纯 Redux | Redux Thunk | Redux Saga | Redux Observable | RTK Listeners |
|---|---|---|---|---|---|
| 范式 | 无 | 过程式 | 基于生成器 | 响应式流 | 事件监听器 |
| 复杂性 | 不适用 | 低 | 高 | 高 | 中等 |
| 取消 | 否 | 有限 | 是 | 是 | 是 |
| 可测试性 | 不适用 | 中等 | 高 | 高 | 高 |
| 调试 | 不适用 | DevTools | DevTools + Saga monitors | DevTools + RxJS 调试 | DevTools |
| 学习曲线 | 无 | 最小 | 陡峭 | 难度大(需要 RxJS) | 中等 |
来源:docs/faq/Actions.md125-150 docs/style-guide/style-guide.md227-248
Redux listener 中间件允许您在 Action 处理后对其进行响应。
来源:docs/tutorials/essentials/part-6-performance-normalization.md653-681 docs/tutorials/essentials/part-8-rtk-query-advanced.md262-283
RTK Query 是 Redux Toolkit 集成的数据获取和缓存解决方案,其中包含高级功能。
来源:docs/tutorials/essentials/part-8-rtk-query-advanced.md159-222 docs/tutorials/essentials/part-7-rtk-query-basics.md315-345
乐观更新允许在服务器确认之前提供 UI 反馈。
来源:docs/tutorials/essentials/part-8-rtk-query-advanced.md623-689
随着 Redux 应用的增长,组织对于可维护性变得越来越重要。
来源:docs/faq/CodeStructure.md13-89 docs/style-guide/style-guide.md97-125
使用 Redux Toolkit 的现代 Redux 强调使用 slice 模式进行单文件逻辑编写
来源:docs/tutorials/essentials/part-2-app-structure.md172-194 docs/style-guide/style-guide.md126-199
Redux 包含有助于调试复杂应用的工具和模式。
| 功能 | 描述 | 用例 |
|---|---|---|
| 重放 Action | 逐个重放 Action | 理解序列效应 |
| 跳过 Action | 暂时跳过 Action | 隔离有问题的 Action |
| 状态导入/导出 | 保存和加载状态 | 共享 Bug 复现 |
| Action 追踪 | 追踪 Action 的来源 | 查找 Action 的来源位置 |
| Action 过滤 | 隐藏特定 Action | 聚焦于相关 Action |
| 自定义监控 | 额外的调试 UI | 专门的视觉化 |
来源:docs/tutorials/essentials/part-2-app-structure.md71-111 docs/tutorials/essentials/part-3-data-flow.md184-191
来源:docs/style-guide/style-guide.md47-54 docs/tutorials/essentials/part-2-app-structure.md71-111
Redux 应用通常需要与外部数据源和服务进行交互。
来源:docs/faq/CodeStructure.md105-110 docs/tutorials/essentials/part-6-performance-normalization.md559-566
来源:docs/faq/OrganizingState.md25-39 docs/faq/ReactRedux.md265-322
高级 Redux 用法建立在可预测状态管理的 Core 原则之上,同时融合了旨在提高性能、可维护性和开发者体验的模式。通过利用适合您特定用例的正确技术,Redux 可以有效地扩展以支持复杂的应用程序,同时保持集中式、可预测的状态容器的优势。
请记住,其中许多高级模式已包含在 Redux Toolkit 中,这是编写 Redux 代码的首选方式。对于大多数应用程序,从 Redux Toolkit 开始并根据需要采用这些高级模式将提供最佳的开发体验和应用程序性能平衡。
来源:docs/style-guide/style-guide.md87-92 docs/introduction/why-rtk-is-redux-today.md8-13
刷新此 Wiki
最后索引时间2025 年 4 月 18 日 (304031)