何时在angular2中使用ngrx / effect

时间:2017-05-22 13:12:29

标签: angular angular-services ngrx ngrx-effects

我有一个与api通信的anuglar2项目。最近,我决定集成ngrx / store来维护组件的状态,并遵循dump-smart组件架构。但接下来,我继续阅读关于可以在api请求上使用的ngrx / effect。

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

4 个答案:

答案 0 :(得分:17)

如果你的案子很简单,那么你就不需要effect了。此外,effect本身不会比调用您的服务方法更多。

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

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

何时使用效果:

如果您想根据其他操作触发操作(用英语口语表示,您可以将其称为侧 - effect ),或者当您想要添加通用错误处理或也许是伐木。

effect的工作方式:effect侦听任何已定义的操作(例如 LoadDataAction ),然后进行一些处理并返回任何操作然后由商店处理并分发给reducer或其他effect

示例:

  1. 调度LoadDataAction
  2. 触发effect loadData $
  3. loadData $ - effect调用数据服务
  4. 加载数据失败
  5. loadData $ - effect返回 LoadDataFailureAction
  6. ngrx处理行动...

    1. LoadDataFailureAction 可能会被以下方式选中:
      • 记录器效果(例如,向服务器发送消息)
      • 通过ui通知效果(例如向用户显示消息)
      • 和/或通过reducer(例如,持久化错误计数或删除状态中的某些内容)

答案 1 :(得分:1)

根据我的理解,你应该在你想要执行某些异步操作时使用ngrx / effects。

在关于这个主题的帖子中,Jim Lynch说

  

“你几乎可以将你的效果视为特殊类型的减速器   这些函数可以让您进行异步调用   以这种方式,可以很容易地插入返回的数据   商店的应用程序内部状态。“

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

答案 2 :(得分: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

您将看到设置和使用它的简单程度。

答案 3 :(得分:-1)

您可以使用reducer进行通信,但这只是纯函数。

当您需要呼叫某些服务时,您应该在所有情况下使用效果。