我有一个与api通信的anuglar2项目。最近,我决定集成ngrx / store来维护组件的状态,并遵循dump-smart组件架构。但接下来,我继续阅读关于可以在api请求上使用的ngrx / effect。
在这里我的问题来了,我为什么要使用ngrx / effect库,只是从我的容器组件调用我的服务中的相应函数来执行api请求,并在成功调度操作上将返回的值保存在我的商店中
答案 0 :(得分:17)
如果你的案子很简单,那么你就不需要effect
了。此外,effect
本身不会比调用您的服务方法更多。
简而言之:如果您的项目非常小并且没有很多功能,那么它只会让您编写更多代码。
如果项目很大,它将帮助您构建数据流和项目组件。
如果您想根据其他操作触发操作(用英语口语表示,您可以将其称为侧 - effect
),或者当您想要添加通用错误处理或也许是伐木。
effect
的工作方式:effect
侦听任何已定义的操作(例如 LoadDataAction ),然后进行一些处理并返回任何操作然后由商店处理并分发给reducer或其他effect
。
示例:
effect
( loadData $ )effect
调用数据服务effect
返回 LoadDataFailureAction ngrx处理行动...
答案 1 :(得分:1)
根据我的理解,你应该在你想要执行某些异步操作时使用ngrx / effects。
在关于这个主题的帖子中,Jim Lynch说
“你几乎可以将你的效果视为特殊类型的减速器 这些函数可以让您进行异步调用 以这种方式,可以很容易地插入返回的数据 商店的应用程序内部状态。“
答案 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进行通信,但这只是纯函数。
当您需要呼叫某些服务时,您应该在所有情况下使用效果。