将 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() { ... },
)