清晰动作史诗的无限循环

时间:2017-07-20 10:06:53

标签: rxjs redux-observable

我使用redux-observable来处理redux异步操作。

我需要通过id清除模块状态。

这是我的clearModuleByIdEpic

const clearModuleByIdEpic = (action$: ActionsObservable<any>) => {
  return action$.ofType(t.CLEAR_MODULE_BY_ID)
    .map((action: IActionPayload<any>): string => action.payload.id)
    .map(clearModuleById);
}

这是我的组件方法:调用clearModuleById操作。

 private onClear(id: string) {
    this.props.clearModuleById(id);
  }

但是当我点击删除按钮时会触发onClear点击事件。

它会触发clearModuleById动作的无限循环。

我犯错了吗?

1 个答案:

答案 0 :(得分:2)

看起来你正在从史诗中过滤的史诗中调出相同的动作。这将始终*导致无限循环。你需要总是A)调度一个不同的动作,或者B)在触发适当的副作用后不在epic中发送任何其他东西。

除了同步重新调度同一个动作之外,它看起来并不像你的史诗实际做了什么。 redux-observable中的epics允许您为一个动作执行一个或多个(a)同步副作用。

一般来说,除非你使用某种形式的逃生舱,否则你不应该从史诗中重新发出相同的动作。这实际上是一种递归形式,所有常见的递归问题都适用。未能突破递归意味着无限循环。

*有例外情况,但99.99%的时间都是如此。