什么是NgRx
NgRx是用于在Angular中构建反应式应用程序的框架。NgRx提供状态管理,副作用隔离,实体集合管理,路由器绑定,代码生成以及开发人员工具,这些工具可增强开发人员在构建许多不同类型的应用程序时的体验。
为什么要使用NgRx进行状态管理?
NgRx通过存储单个状态和使用操作来表达状态更改,从而提供了用于创建可维护的显式应用程序的状态管理。
- 可序列化
通过规范化状态变化并将其传递给可观察对象,NgRx提供了可序列化性,并确保状态可预测地存储。这样可以将状态保存到外部存储,例如localStorage。
此外,它还允许从Store Devtools检查,下载,上传和调度操作。
- 类型安全
依靠TypeScript编译器来保证程序正确性,从而在整个体系结构中提高了类型安全性。
- 封装
使用NgRx Effects和Store,可以将与外部资源副作用(例如网络请求,Web套接字和任何业务逻辑)的任何交互都与UI隔离。这种隔离允许使用更多纯净和简单的组件,并保持单一职责原则。
- 可测试的
由于Store使用纯函数来更改状态和从状态中选择数据,并且能够将副作用与UI隔离,因此测试变得非常简单。NgRx还提供诸如provideMockStore和provideMockActions用于隔离测试的测试设置,并提供更好的测试体验。
- 性能
存储建立在单个不变的数据状态上,使用OnPush策略使更改检测变成一项非常容易的任务。NgRx还由可记忆的选择器功能提供支持,这些选择器功能可优化状态查询计算。
何时应使用NgRx进行状态管理
特别是,当管理服务中的状态不再足够时,在构建具有大量用户交互和多个数据源的应用程序时,可能会使用NgRx。
SHARI原则可以回答“我何时需要NgRx”这个问题:
-
Shared:由许多组件和服务的访问的状态。
-
Hydrated:从外部存储持久化。
-
Available:状态,需要时可用重新进入路线。
-
Retrieved:必须附带副作用的状态。
-
Impacted:受其他来源的行动影响的状态。