We saw that take
Effects are resolved by waiting for actions to be dispatched to the Store. And that put
Effects are resolved by dispatching the actions provided as argument.
When a Saga is started (either at startup or later dynamically), the middleware automatically connects its take
/put
to the store. The 2 Effects can be seen as a sort of Input/Output to the Saga.
redux-saga
provides a way to run a Saga outside of the Redux middleware environment and connect it to a custom Input/Output.
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() { ... },
)