本页介绍了有效使用 React 与 Redux 的高级模式和技术。它着重于优化性能、正确组织组件、处理复杂数据流以及实现复杂的状态管理解决方案。有关基本的 React-Redux 集成和 Hooks 用法,请参阅React-Redux Hooks。
React-Redux 应用程序经常面临性能挑战,当组件不必要地重新渲染或复杂状态派生导致瓶颈时,尤为突出。以下是解决这些问题的模式。
Redux 中最重要的模式之一是使用记忆化选择器高效地从 store 中派生数据。虽然基本选择器适用于简单的状态访问,但记忆化选择器可以在底层数据未发生变化时防止不必要的重复计算。
记忆化选择器的主要优点包括
来源:docs/tutorials/essentials/part-6-performance-normalization.md65-134 docs/tutorials/fundamentals/part-7-standard-patterns.md62-120
与其让一个连接组件传递大量 props,不如将多个组件连接到 store,让它们在需要时访问特定的状态片段。
关键实现技术
useSelector 只拉取组件所需数据React.memo()来源:docs/faq/ReactRedux.md62-125 docs/tutorials/fundamentals/part-5-ui-and-react.md137-200
Redux thunk 是处理异步操作的标准方式,但有效地组织此代码需要特定的模式。
使用枚举风格的方法,通过专门的状态字段跟踪加载状态
这种模式包括
来源:docs/tutorials/essentials/part-5-async-logic.md295-338 docs/tutorials/fundamentals/part-7-standard-patterns.md211-289
Thunk 提供了一种使用 Redux 处理异步操作的一致方式
重要的 thunk 模式包括
createAppAsyncThunk 使用类型安全来源:docs/tutorials/essentials/part-5-async-logic.md89-141 docs/tutorials/essentials/part-5-async-logic.md405-450
复杂的应用程序需要高效的数据处理。规范化状态提供了一种模仿数据库表结构的解决方案。
规范化状态的优点
来源:docs/tutorials/fundamentals/part-7-standard-patterns.md386-471 docs/tutorials/essentials/part-6-performance-normalization.md200-350
选择器在组件和状态结构之间创建了一个抽象层,从而实现灵活的状态演变。
重要的选择器模式
createSelector 对耗时计算进行记忆化来源:docs/tutorials/essentials/part-4-using-data.md445-486 docs/tutorials/essentials/part-6-performance-normalization.md65-84
复杂的应用程序需要超越简单状态更新的通信。这些模式有助于管理复杂的交互。
对于需要在不修改状态的情况下响应 action 的副作用,请使用监听器中间件
使用 Redux Toolkit 监听器中间件实现
createListenerMiddleware 创建监听器中间件startAppListening 添加 effect 监听器来源:docs/tutorials/essentials/part-6-performance-normalization.md571-650
优化组件到 store 的通信
来源:docs/tutorials/essentials/part-5-async-logic.md525-587 docs/tutorials/fundamentals/part-5-ui-and-react.md200-275
对于高级数据获取模式,RTK Query 提供了一个全面的解决方案,它消除了与数据获取 thunk 相关的大部分样板代码。
关键的 RTK Query 模式
来源:docs/tutorials/essentials/part-8-rtk-query-advanced.md155-236 docs/tutorials/essentials/part-7-rtk-query-basics.md155-184
为了实现响应式界面,实现乐观更新,在服务器确认之前立即显示更改。
实现技术
来源:docs/tutorials/essentials/part-8-rtk-query-advanced.md240-310
有效地组织 Redux 代码有助于维护大型应用程序。推荐的方法是采用基于功能的结构,其中“slice”定义自己的 action 和 reducer。
关键组织模式
来源:docs/faq/CodeStructure.md30-57 docs/tutorials/essentials/part-2-app-structure.md172-194
有效地将 TypeScript 与 Redux 结合使用可以改善开发者体验并防止常见错误。
重要的类型化模式
PayloadAction<T> 为 action payload 定义类型来源:docs/tutorials/essentials/part-3-data-flow.md232-251 docs/tutorials/essentials/part-5-async-logic.md226-264
测试 Redux 应用程序涉及 Redux 架构不同部分的多种模式。
关键测试方法
来源:docs/tutorials/fundamentals/part-7-standard-patterns.md590-650
这些高级模式有助于构建可扩展和可维护的 Redux 应用程序。随着应用程序复杂性的增长,这些模式对于有效管理状态、优化性能和创造流畅的用户体验变得越来越重要。
此处概述的模式代表了多年来在生产应用程序中使用 Redux 而演变出的最佳实践。然而,您应始终根据您的具体应用程序需求调整这些模式,而非教条式地应用它们。
来源:docs/tutorials/essentials/part-6-performance-normalization.md1-50 docs/faq/CodeStructure.md1-62