【问题标题】:Creating a meta-epic which works like combineEpics but selects one epic based on namespace创建一个像 combineEpics 一样工作的元史诗,但根据命名空间选择一个史诗
【发布时间】:2017-05-08 08:56:41
【问题描述】:

我正在尝试命名空间我的史诗。我基本上想组合我的史诗,但使用的史诗应该取决于我所在州设置的命名空间。 到目前为止,我已经到了这里:

const epics = {
  'ns1': nameSpace1Epic,
  'ns2': nameSpace2Epic,
  'default': (action$, store) => {
    return Observable.of({type: 'NOP'})
  }
}
const superEpic = (action$, store) => {
  const { namespace } = store.getState()
  const epic = epics[namespace]
  const resultAction$ = epic(action$, store)
  return resultAction$
}

这适用于第一个操作,它成功切换到正确的命名空间。 然而,当第二个动作进来时,它仍然停留在第一个选择的命名空间。 没有动作通过超史诗,直接进入第一个史诗。

我一直在阅读 Rx 文档并尝试使用不同类型的运算符,但没有任何运气。 有人知道我可能做错了什么吗?

【问题讨论】:

    标签: javascript rxjs reactive-programming reactive


    【解决方案1】:

    我找到了解决问题的方法。 superEpic 应该是一个将操作(一次一个)定向到命名空间流的流,它现在所做的只是用另一个流替换自己。 flatMap救援:

    const superEpic = (action$, store) => 
      action$.flatMap(action => {
        const { namespace } = store.getState()
        const epic = epics[namespace]
        return epic(Observable.of(action), store)
      })
    

    如果您想在操作流中使用ofType 运算符,请确保从redux-observable/lib/ActionsObservable 导入ActionsObservable 像这样:

    import { ActionsObservable } from 'redux-observable/lib/ActionsObservable'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多