跳至主要内容

将 Saga 连接到外部输入/输出

我们看到 take 效果通过等待动作被分派到 Store 来解决。 并且 put 效果通过分派作为参数提供的动作来解决。

当 Saga 启动时(无论是启动时还是之后动态启动),中间件会自动将它的 take/put 连接到 store。 这两个 Effect 可以被看作是 Saga 的一种输入/输出。

redux-saga 提供了一种在 Redux 中间件环境之外运行 Saga 并将其连接到自定义输入/输出的方法。

import { runSaga, stdChannel } from 'redux-saga'

const emitter = new EventEmitter()
const channel = stdChannel()
emitter.on("action", channel.put)

const myIO = {
// this will be used to orchestrate take and put Effects
channel,
// this will be used to resolve put Effects
dispatch(output) {
emitter.emit("action", output)
},
// this will be used to resolve select Effects
getState() {
return state
}
}

runSaga(
myIO,
function* saga() { ... },
)

更多信息,请参见 API 文档通道演示