繁体   English   中英

Redux和React RxJS中的副作用

[英]Side Effects in Redux & React RxJS

你应该在哪里放置API-calls终极版

我认为它们属于Actions,因为它们是data一部分,并且没有副作用。

听起来对吗?

我想避免使用RxJS或ReduxSaga。

我在动作文件中进行API调用,但有一个单独的函数可自行创建动作。 无论如何我都同意您的观点,即API调用与动作创建者一起(在我们的集体看来)是最好的。

创建方案

  1. 如果仅在单个组件中调用同步API,则可以在操作中进行API调用,取回数据,然后进行分派。 很简单。
  2. 如果您在多个组件中调用同步API,您将分别处理它们吗?
  3. 如果调用异步API,您将在请求开始时调度标志,并在请求完成时再次调度标志吗?

对于2,3点, Thunk中间件是最好的选择,因为它比Saga容易得多。

这是redux世界中的redux蠕虫,并且有很多方法。 主要思想是执行可以访问商店的dispatch方法的功能,以便这些功能可以协调自己对商店的操作顺序。 但是,每种方法都以不同的方式来修饰函数执行和副作用的固有状态(例如,等待API调用完成,然后再将“完成”操作分派给商店):

  • 必要的解决方案是thunk ,它们只是普通的旧函数。 当商店收到一个thunk时,它不会像常规对象操作那样通过减速器运行thunk,而是在传递商店的dispatch功能的同时执行thunk,以便thunk可以编排自己的动作序列。 有关示例,请参见redux-thunk

  • redux-saga是一种声明式解决方案,您可以在其中调度描述如何执行副作用的操作对象。 例如,如果副作用是从API提取,则该操作包含提取函数和要传递给提取函数的参数。 例如,如果fetch调用是fetchFromServer(a, b, c)则您分派的操作将包含fetchFromServerabc 副作用的有状态部分保留在称为“ sagas”的生成器函数中。

  • redux-observable是另一个声明性解决方案,但它不是使用生成器来实现“状态”,而是使用了observable。 可观察变量可能有点不直观,因此我在这里不做过多介绍,但这是我使用的解决方案。 老实说,后两者在某种程度上是同一枚硬币的两个侧面,但我发现可观察到的更为抽象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM