创建一个 meta-epic ,它像 combineEpics 一样工作,但根据命名空间选择一个史诗
Creating a meta-epic which works like combineEpics but selects one epic based on namespace
我正在尝试 命名空间 我的 epics。我基本上想结合我的 epics,但使用的史诗应取决于我的状态中设置的名称空间。
到目前为止我已经到达这里:
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-documentation 并尝试使用不同类型的运算符,但没有任何运气。
有人知道我可能做错了什么吗?
我找到了解决问题的办法。 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'
我正在尝试 命名空间 我的 epics。我基本上想结合我的 epics,但使用的史诗应取决于我的状态中设置的名称空间。 到目前为止我已经到达这里:
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-documentation 并尝试使用不同类型的运算符,但没有任何运气。 有人知道我可能做错了什么吗?
我找到了解决问题的办法。 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'