Redux中的副作用&反应RxJS

时间:2018-03-19 12:38:03

标签: reactjs redux rxjs side-effects

您应该将API-calls放在 Redux

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

这听起来不错吗?

我想避免使用RxJS或ReduxSaga。

3 个答案:

答案 0 :(得分:0)

我在动作文件中进行API调用,但是有一个单独的函数可以创建动作本身。无论我是否同意您的API呼叫,与动作创建者一起工作效果最好(在我们的集体意见中)。

答案 1 :(得分:0)

创建方案

  1. 如果您只在一个组件中调用同步API,则可以在操作中调用API,获取数据然后再调度。很简单就是这样。
  2. 如果您在多个组件中调用同步API,您将单独处理它们吗?
  3. 如果您调用异步API,您将在请求开始时调度一个标志,并在请求完成时再次发送一个标志?
  4. 对于2,3点 Thunk中间件是最佳选择,因为它比Saga容易得多。

答案 2 :(得分:0)

这是redux世界中的一种蠕虫,有很多种方法。主要思想是执行可以访问商店的dispatch方法的函数,以便这些函数可以将自己的操作序列编排到商店。但是,每种方法都会以不同的方式完成功能执行和副作用的固有状态(例如,在将“完成”操作发送到商店之前等待API调用完成):

  • 命令式解决方案是 thunks ,它们只是普通的旧功能。当商店收到thunk,而不是像常规对象动作那样通过reducer运行thunk时,商店在传递商店的dispatch函数时执行thunk,以便thunk可以编排自己的动作序列。有关示例,请参阅redux-thunk

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

  • redux-observable是另一种声明性解决方案,但它不使用生成器来实现“有状态”,而是使用了observables。 Observable可能有点不直观,所以我不会在这里讨论它,但它是我使用的解决方案。老实说,后两者在某种程度上是同一枚硬币的两面,但我发现可观察到的是更优雅的抽象。