Solución:
Redux Saga utiliza el all
función en la versión reciente (0.15.3) para combinar varias sagas en una saga raíz para la tienda Redux.
import { takeEvery, all } from 'redux-saga/effects';
...
function *watchAll() {
yield all([
takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
takeEvery("CREATE_USER_REQUESTED", createUser)
]);
}
export default watchAll;
En la tienda de Redux puedes usar la saga raíz para el middleware de la saga:
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';
import rootReducer from './reducers';
import rootSaga from './sagas';
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
rootReducer,
applyMiddleware(sagaMiddleware)
);
sagaMiddleware.run(rootSaga)
Por supuesto, ese es el objetivo de las sagas.
Una aplicación típica tendrá varias sagas esperando en segundo plano, esperando una acción / acciones en particular (take
efecto).
A continuación se muestra un ejemplo de cómo puede configurar varias sagas desde el número 276 de redux-saga:
./saga.js
function* rootSaga () {
yield [
fork(saga1), // saga1 can also yield [ fork(actionOne), fork(actionTwo) ]
fork(saga2),
];
}
./main.js
import { createStore, applyMiddleware } from 'redux'
import createSagaMiddleware from 'redux-saga'
import rootReducer from './reducers'
import rootSaga from './sagas'
const sagaMiddleware = createSagaMiddleware()
const store = createStore(
rootReducer,
applyMiddleware(sagaMiddleware)
)
sagaMiddleware.run(rootSaga)
Esto ha cambiado un poco desde que se publicaron las últimas respuestas. La forma preferida de crear la saga raíz, como se documenta en https://redux-saga.js.org/docs/advanced/RootSaga.html, es usando spawn
:
export default function* rootSaga() {
yield spawn(saga1)
yield spawn(saga2)
yield spawn(saga3)
}
spawn
es un efecto que desconectará la saga de su hijo de su padre, lo que le permitirá fallar sin bloquear a su padre. Esto simplemente significa que incluso si una saga fallara, el rootSaga
y otras sagas no morirán. También hay una forma de recuperar sagas que fallan (más información sobre eso está disponible en el enlace mencionado anteriormente).