我从事过一些 Angular 2+ 项目,但我仍然想知道为什么我们需要 NgRX。我可以用服务来实现一切,而且它们似乎更容易理解。我不确定这是否是因为我不熟悉 NgRX,但无论如何我找不到 NgRX 的特定用例。谁能给我一些关于以下内容的解释?
- NgRx 和服务实现状态的区别
- 每种实施方式的优缺点
- 在实现 NgRX 时我们需要考虑什么?
- 对性能有任何担忧吗?
我从事过一些 Angular 2+ 项目,但我仍然想知道为什么我们需要 NgRX。我可以用服务来实现一切,而且它们似乎更容易理解。我不确定这是否是因为我不熟悉 NgRX,但无论如何我找不到 NgRX 的特定用例。谁能给我一些关于以下内容的解释?
这将是一个相当ngrx
专业的帖子,因为我已经使用它近 3 年了。我已经看到很多次它脱离了状态并且管理ngrx
状态变得很痛苦,但主要是由于无视应用程序架构和最佳实践。如果应用得当,编写和审查ngrx
代码是一种乐趣,因为事物具有严格的结构。
恕我直言:它可以在任何应用程序中使用,在更大的应用程序中确实有意义。可以为您做的所有ngrx
事情也可以使用服务来构建,但从长远来看,这将变得越来越难。当你意识到你需要它时,为时已晚。
这是一篇讨论这一切的文章。
https://blog.strongbrew.io/do-we-really-need-redux/
NgRx 和服务实现状态的区别
虽然ngrx
对于如何读取/更新/写入数据非常有意见,但服务更多地取决于开发人员。我倾向于选择 CRUD 操作来保持一致性。
Observables
哪些保存数据和函数来更新上述Observables
. 这通常意味着我们最终会在每个服务中重新创建 CRUD 操作。ngrx
将数据公开为selectors
并将更新/删除函数公开为actions
. 最重要的是effects
要处理异步操作。读和写之间有明显的区别,因为逻辑发生在不同的地方,而不是服务类,后者主要是多合一的。每种实施方式的优缺点
有一些ngrx
有价值的东西,例如它的扩展,但它们需要正确使用和配置。对我来说,主要价值是它提供的一致性。
@ngrx/entity
-package 可以更轻松地管理集合,因为它提供了诸如upsertOne
或updateMany
具有明确定义的类型的方法。它还通过生成选择器提供了方便的访问:
@ngrx/data
是@ngrx/entity
包的扩展,通过提供 API 方法来更新/删除...实体,从而无需编写大量服务
@ngrx/effects
使用自己的服务进行扩展。对性能有任何担忧吗?
@ngrx
如果忽略最佳实践,性能可能会受到影响:=
ngrx
创建的选择器createSelector
被记忆化,这意味着它们只会在状态改变时触发改变。这是一个性能专家ngrx
,要在大量服务中重新实现它可能需要做很多工作
在实现 NgRX 时我们需要考虑什么?
尽快为您提供最佳实践。