Reactjs Observable.merge在史诗中表现不同
在React/Redux应用程序中,我使用Redux Observable,我希望epic输出两个不同的操作 首先,我试过:Reactjs Observable.merge在史诗中表现不同,reactjs,redux,rxjs,redux-observable,Reactjs,Redux,Rxjs,Redux Observable,在React/Redux应用程序中,我使用Redux Observable,我希望epic输出两个不同的操作 首先,我试过: const epic1 = action$ => action$ .ofType("A") .mapTo({ type: "B" }) .merge(Observable.of({ type: "C" })); 由于它不起作用,我不得不切换到: const epic2 = action$ => action$ .ofT
const epic1 = action$ =>
action$
.ofType("A")
.mapTo({ type: "B" })
.merge(Observable.of({ type: "C" }));
由于它不起作用,我不得不切换到:
const epic2 = action$ =>
action$
.ofType("D")
.mergeMap(value =>
Observable.merge(
Observable.of({ type: "E" }),
Observable.of({ type: "F" })
)
);
看看这个代码沙盒
问题是,我不太明白为什么第一次尝试不起作用,因为在下面的例子中,它在史诗之外运行良好:
var observable = Observable.of({type: "A"})
.mapTo({type: "B"})
.merge(Observable.of({ type: "C" }));
observable.subscribe(value => {
this.setState(prevState => ({
values: [...prevState.values, value]
}));
});
你知道为什么它在epic中表现不同吗?这不是因为你在使用epics。第一个示例使用
.merge(Observable.of({type:“C”}))
,因此它立即订阅({type:“C”})的Observable.of
您订阅的epic1
。但是,您使用的是redux,因此订阅发生在redux内部的某个地方,Observable.of({type:“C”})
会立即发出,您甚至不知道它是何时发生的。然后,类型(“A”)的任何其他操作.ofType(“A”)
都不会进行更改,因为.merge(Observable.of({type:“C”}))
已经发出了它的唯一值
这也解释了为什么您在问题末尾提到的示例能够如预期的那样工作
另一方面,当您使用mergeMap
时,将对源观测到的每个发射调用回调(在类型为(“D”)action的每个action$)。它创建新的E
和F
操作,这些操作立即合并到链中