gpt4 book ai didi

reactjs - 如何在 redux-sagas 中设置并随后取消多个观察者

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

只是想了解一下 redux-sagas,并遇到了在一个 saga 中设置两个观察者然后取消它们的问题。

一些背景:我有一个 JSON 编辑器组件,其中 saga 处理对后端 API 的调用以加载和保存 JSON 架构。该项目基于React Boilerplate因此应用程序的结构几乎完全相同。

相关代码如下:

export function* loadSchemaWatcher() {
const action = yield take(LOAD_SCHEMA)
yield call(loadSchema, action)
}

export function* saveSchemaWatcher() {
while (true) {
const action = yield take(SAVE_SCHEMA)
yield call(saveSchema, action)
}
}

export function* editorData() {
const watcher = yield [
fork(loadSchemaWatcher),
fork(saveSchemaWatcher)
]

yield take(LOCATION_CHANGE)
yield watcher.forEach(task => cancel(task))
}

export default [
editorData,
]

我假设yield watcher.forEach(task => cancel(task))只会循环Tasks数组但它们并没有被取消。

最佳答案

您的代码不起作用,因为 forEach 返回未定义。您必须将其替换为 map ,它将返回取消效果数组

yield watcher.map(task => cancel(task))

您还可以使用race效果以声明方式取消整个数组效果。请注意,fork 已替换为 call

export function* editorData() {
yield race([
[
call(loadSchemaWatcher),
call(saveSchemaWatcher)
],
take(LOCATION_CHANGE)
])
}

关于reactjs - 如何在 redux-sagas 中设置并随后取消多个观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073247/

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