为啥使用 NGRX 而不是构造函数注入服务?

Posted

技术标签:

【中文标题】为啥使用 NGRX 而不是构造函数注入服务?【英文标题】:Why use NGRX instead of constructor injected services?为什么使用 NGRX 而不是构造函数注入服务? 【发布时间】:2018-09-27 20:20:47 【问题描述】:

想知道为什么要为 Angular 应用程序使用 NGRX 或 NGXS 而不是构造函数注入服务来处理组件 IO?

是否只是为了确保组件属性引用在不切换整个属性值引用的情况下永远不会发生变异,还是还有更多?

NGRX 的替代品

根据我开发的答案:

Slice。

我相信它可以完成 NgRx / NgXS 所做的所有事情(除了时间机器 - 但这很容易通过增量通知实现 - 已经支持)。但样板为零。

这里有一篇文章展示了一些功能: https://medium.com/@ole.ersoy/storing-users-in-the-reactive-slice-object-store-5ea0fab06256

【问题讨论】:

【参考方案1】:

您需要编写一个提供一致且易于更改的 api 来修改数据的服务,您需要提出一种快速且经过良好测试的数据查询方式,您需要编写和维护 observables对于您的所有数据。您将不得不为异步调用编写并建立一个模式。您必须编写一个 api 才能访问模板中的数据。

当你完成时,你最终会得到类似于 ngrx 的东西。

对于一个简单的单一服务数据,ngrx 是多余的,有很多样板,但对于具有多个数据源的反应式应用程序或具有良好使用库的众多开发人员之间的复杂数据交互确实很有帮助。

关注 SO 答案以获得更深入的解释:What are benefits of using store (ngrx) in angular 2

要了解何时使用哪种方法,请阅读以下内容:RxJs and Ngrx Store - When to Use a Store And Why?

【讨论】:

以上是关于为啥使用 NGRX 而不是构造函数注入服务?的主要内容,如果未能解决你的问题,请参考以下文章

将 DAO 注入构造函数是不是被认为是不好的做法?如果是这样,为啥?

为啥使用set注入,一定要给类提供一个无参的构造函数,否则Spring不能实例化类的.

如何在 Typescript 中用静态变量表达构造函数?

为啥使用@PostConstruct?

ZF2:在服务构造函数中注入变量

为啥在我的代码中调用复制构造函数而不是移动构造函数?