gpt4 book ai didi

javascript - redux-observable - 在单个史诗中调度多个 redux 操作

转载 作者:行者123 更新时间:2023-12-03 08:02:58 24 4
gpt4 key购买 nike

我正在寻找在 redux-observable 的单个 Epic 中调度多个 redux 操作的方法中间件。

假设我有以下 Epic。每当SEARCH事件发生,Epic 从后端加载数据并调度 RESULTS_LOADED行动。

searchEpic = (action$) => 
action$
.ofType('SEARCH')
.mergeMap(
Observable
.fromPromise(searchPromise)
.map((data) => {
return {
type: 'RESULTS_LOADED',
results: data
}
})
)

现在,假设我需要在 searchPromise已解决。

这样做的最简单的方法似乎是有第二个史诗将听 RESULTS_LOADED并发送第二个 Action 。像这样:
resultsLoadedEpic = (action$) => 
action$
.ofType('RESULTS_LOADED')
.map(({results} => {
return {
type: 'MY_OTHER_ACTION',
results
}
})

在这个简单的例子中,这很容易。但是随着 Epics 的发展,我倾向于发现自己有很多 redux 操作,其唯一目的是触发其他操作。此外,需要重复一些 rxjs 代码。我觉得这有点难看。

所以,我的问题是:有没有办法在单个 Epic 中调度多个 redux 操作?

最佳答案

没有要求您进行一对一的输入/输出比率。因此,您可以使用 mergeMap 发出多个操作(又名 flatMap )如果您需要:

const loaded = (results) => ({type: 'RESULTS_LOADED', results});
const otherAction = (results) => ({type: 'MY_OTHER_ACTION', results});

searchEpic = (action$) =>
action$
.ofType('SEARCH')
.mergeMap(
Observable
.fromPromise(searchPromise)
// Flattens this into two events on every search
.mergeMap((data) => Observable.of(
loaded(data),
otherAction(data))
))
)

请注意,任何接受 Observable 的 Rx 运算符也可以接受 Promise、Array 或 Iterable;消费它们,就好像它们是溪流一样。所以我们可以用一个数组来代替同样的效果:
.mergeMap((data) => [loaded(data), otherAction(data)])

您使用哪一种取决于您的个人风格偏好和用例。

关于javascript - redux-observable - 在单个史诗中调度多个 redux 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com