菜单

高级用法

相关源文件

本文档记录了在 Redux 核心基础之上构建的高级 Redux 模式和技术。这些模式将帮助您扩展应用程序、优化性能、管理复杂的状态转换以及处理复杂异步逻辑。

有关选择器和记忆化(memoization)的更多信息,请参阅 选择器与记忆化。有关规范化状态和优化数据结构的指南,请参阅 状态规范化与结构。有关中间件实现的详细模式,请参阅 中间件模式

高级状态管理方法

Redux 为状态管理提供了坚实的基础,但随着应用程序日益复杂,出现了额外的模式来帮助管理这种复杂性。

Thunks 与其他中间件方法的比较

在处理异步逻辑时,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 Creator

对于需要转换或验证的复杂 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 处理嵌套对象

Immer(已集成到 Redux Toolkit 的 createSlice 中)允许您编写“可变”代码,这些代码会被安全地转换为正确的不可变更新。

来源:docs/tutorials/essentials/part-2-app-structure.md375-383 docs/style-guide/style-guide.md92-96

使用 TypeScript 处理状态

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 外部使用

Redux 提供了在 React 组件外部使用 store 数据或与外部系统集成的模式。

在 React 组件外部访问 Redux

来源:docs/faq/CodeStructure.md114-121 docs/tutorials/essentials/part-8-rtk-query-advanced.md289-344

针对高级场景的 Store 配置

Redux store 配置可以针对各种高级需求进行自定义

来源:docs/tutorials/essentials/part-2-app-structure.md160-169 docs/tutorials/essentials/part-3-data-flow.md104-133

高级副作用管理

管理副作用是 Redux 应用程序的关键方面,有多种可用方法。

副作用方法比较

方法纯 ReduxRedux ThunkRedux SagaRedux ObservableRTK Listeners
范式过程式基于生成器响应式流事件监听器
复杂性不适用中等
取消有限
可测试性不适用中等
调试不适用DevToolsDevTools + Saga monitorsDevTools + RxJS 调试DevTools
学习曲线最小陡峭难度大(需要 RxJS)中等

来源:docs/faq/Actions.md125-150 docs/style-guide/style-guide.md227-248

使用 Listeners 中间件进行响应式逻辑

Redux listener 中间件允许您在 Action 处理后对其进行响应。

来源:docs/tutorials/essentials/part-6-performance-normalization.md653-681 docs/tutorials/essentials/part-8-rtk-query-advanced.md262-283

高级 RTK Query 技术

RTK Query 是 Redux Toolkit 集成的数据获取和缓存解决方案,其中包含高级功能。

带标签的缓存失效

来源:docs/tutorials/essentials/part-8-rtk-query-advanced.md159-222 docs/tutorials/essentials/part-7-rtk-query-basics.md315-345

RTK Query 乐观更新

乐观更新允许在服务器确认之前提供 UI 反馈。

来源:docs/tutorials/essentials/part-8-rtk-query-advanced.md623-689

项目组织以实现规模化

随着 Redux 应用的增长,组织对于可维护性变得越来越重要。

按功能划分 vs. 按类型划分的组织方式

来源:docs/faq/CodeStructure.md13-89 docs/style-guide/style-guide.md97-125

Redux Slice 文件组织

使用 Redux Toolkit 的现代 Redux 强调使用 slice 模式进行单文件逻辑编写

来源:docs/tutorials/essentials/part-2-app-structure.md172-194 docs/style-guide/style-guide.md126-199

调试高级 Redux 应用

Redux 包含有助于调试复杂应用的工具和模式。

用于高级调试的 Redux DevTools 功能

功能描述用例
重放 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 应用通常需要与外部数据源和服务进行交互。

WebSockets 和实时更新

来源:docs/faq/CodeStructure.md105-110 docs/tutorials/essentials/part-6-performance-normalization.md559-566

与非 Redux 状态管理集成

来源:docs/faq/OrganizingState.md25-39 docs/faq/ReactRedux.md265-322

结论

高级 Redux 用法建立在可预测状态管理的 C​​ore 原则之上,同时融合了旨在提高性能、可维护性和开发者体验的模式。通过利用适合您特定用例的正确技术,Redux 可以有效地扩展以支持复杂的应用程序,同时保持集中式、可预测的状态容器的优势。

请记住,其中许多高级模式已包含在 Redux Toolkit 中,这是编写 Redux 代码的首选方式。对于大多数应用程序,从 Redux Toolkit 开始并根据需要采用这些高级模式将提供最佳的开发体验和应用程序性能平衡。

来源:docs/style-guide/style-guide.md87-92 docs/introduction/why-rtk-is-redux-today.md8-13