我有一个与 api 通信的 anuglar2 项目。最近决定整合ngrx/store来维护组件的状态,遵循dump-smart组件架构。但是在继续前进的同时,我读到了可以在 api 请求上使用的 ngrx/effect。
我的问题来了,我为什么要使用ngrx/effect库,而不是仅仅从我的容器组件调用我的服务中的相应函数来执行api请求并成功调度操作以将返回的值保存在我的商店中。
我有一个与 api 通信的 anuglar2 项目。最近决定整合ngrx/store来维护组件的状态,遵循dump-smart组件架构。但是在继续前进的同时,我读到了可以在 api 请求上使用的 ngrx/effect。
我的问题来了,我为什么要使用ngrx/effect库,而不是仅仅从我的容器组件调用我的服务中的相应函数来执行api请求并成功调度操作以将返回的值保存在我的商店中。
如果您的情况保持如此简单,那么您将不需要effect
它。此外,它effect
本身只会调用你的服务方法。
简而言之:如果您的项目非常小并且没有很多功能,那只会导致您编写更多代码。
如果您的项目很大,它将帮助您构建数据流和项目组件。
当你想触发基于另一个动作的动作时(在英语口语中你会称之为side-effect
),或者当你想添加一个通用的错误处理或日志时。
an 的effect
工作方式:effect
监听任何已定义的操作(例如LoadDataAction),然后进行一些处理并返回任何操作,然后由存储处理并分发给减速器或其他一些effect
。
例子:
effect
( loadData$ ) 被触发effect
调用数据服务effect
返回一个LoadDataFailureActionngrx 处理动作...
老实说,我认为大多数使用 ngrx 的应用程序不应该是这样。商店解决了大多数基于表单的应用程序没有遇到的问题。
看看我正在开发的一个库,它提供了商店的基于推送的数据流优势,但在没有任何与 ngrx 相关的荒谬样板文件的情况下,设置和推理变得非常简单。
https://github.com/adriandavidbrand/ngx-rxcache
它基于 RxJs 行为主题,为您提供基于推送的数据流的所有好处,并且仍然允许您使用愚蠢的智能组件架构。
我在这里重做了官方的ngrx演示应用程序
https://stackblitz.com/edit/github-tsrf1f
如果您将其与官方 ngrx 演示应用程序进行比较
https://stackblitz.com/github/ngrx/platform/tree/61cbfe537f9df8cef3dd4a6ee0b8f483e49653f4
您将看到设置和使用它是多么简单。
据我了解,您应该在任何时候想要执行一些异步操作时使用ngrx/effects。
在关于这个主题的帖子中,吉姆林奇说
“您几乎可以将您的 Effects 视为特殊类型的 reducer 函数,它们旨在成为您放置异步调用的地方,以便返回的数据可以轻松地插入到应用程序的存储内部状态中。 "