13

我有一个与 api 通信的 anuglar2 项目。最近决定整合ngrx/store来维护组件的状态,遵循dump-smart组件架构。但是在继续前进的同时,我读到了可以在 api 请求上使用的 ngrx/effect。

我的问题来了,我为什么要使用ngrx/effect库,而不是仅仅从我的容器组件调用我的服务中的相应函数来执行api请求并成功调度操作以将返回的值保存在我的商店中。

4

3 回答 3

19

如果您的情况保持如此简单,那么您将不需要effect它。此外,它effect本身只会调用你的服务方法。

简而言之:如果您的项目非常小并且没有很多功能,那只会导致您编写更多代码。

如果您的项目很大,它将帮助您构建数据流和项目组件。


何时使用效果:

当你想触发基于另一个动作的动作时(在英语口语中你会称之为side-effect),或者当你想添加一个通用的错误处理或日志时。

an 的effect工作方式:effect监听任何已定义的操作(例如LoadDataAction),然后进行一些处理并返回任何操作,然后由存储处理并分发给减速器或其他一些effect

例子:

  1. 调度LoadDataAction
  2. 一个effect( loadData$ ) 被触发
  3. loadData $ -effect调用数据服务
  4. 加载数据失败
  5. loadData$ -effect返回一个LoadDataFailureAction

ngrx 处理动作...

  1. LoadDataFailureAction可能通过以下方式获取 :
    • 记录器效果(例如向服务器发送消息)
    • 通过 ui-notification-effect(例如向用户显示消息)
    • 和/或通过reducer(例如保持错误计数或从状态中删除某些内容)
于 2017-05-22T13:26:01.097 回答
0

老实说,我认为大多数使用 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

您将看到设置和使用它是多么简单。

于 2018-06-19T08:04:43.323 回答
0

据我了解,您应该在任何时候想要执行一些异步操作时使用ngrx/effects。

在关于这个主题的帖子中,吉姆林奇说

“您几乎可以将您的 Effects 视为特殊类型的 reducer 函数,它们旨在成为您放置异步调用的地方,以便返回的数据可以轻松地插入到应用程序的存储内部状态中。 "

文章链接:https ://medium.com/@flashMasterJim/the-basics-of-ngrx-effects-effect-and-async-middleware-for-ngrx-store-in-angular-2-f25587493329

于 2017-07-27T03:01:14.340 回答