Redux Thunk es un middleware para Redux que permite escribir acciones que devuelven funciones en lugar de objetos. Esto permite realizar operaciones asíncronas, como hacer una llamada a una API, dentro de una acción.
Redux Saga es también un middleware para Redux que se enfoca en la gestión de efectos secundarios, como las llamadas a API, en una aplicación Redux. En lugar de tener que escribir código asíncrono en las acciones, puedes escribir funciones llamadas “sagas” que manejan la lógica asíncrona de manera separada de la lógica sincrónica de la aplicación.
Ambos middlewares pueden ser útiles para manejar la asincronía en una aplicación Redux, pero cómo se utilizan y cómo se escriben las acciones y funciones es diferente.
Para utilizar Redux Saga en una aplicación, primero debes instalarlo y configurarlo como middleware en tu aplicación Redux.
npm install redux-saga
import createSagaMiddleware from 'redux-saga';
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
reducer,
applyMiddleware(sagaMiddleware)
);
Luego, debes escribir tus sagas y asociarlas con los tipos de acciones que deseas manejar. Una saga se escribe como una función generator que utiliza la función yield para detenerse y esperar por una acción específica.
import { take, put, call } from 'redux-saga/effects';
function* fetchUser(id) {
try {
const user = yield call(Api.fetchUser, id);
yield put({type: 'USER_FETCH_SUCCEEDED', user});
} catch (e) {
yield put({type: 'USER_FETCH_FAILED', message: e.message});
}
}
function* watchFetchUser() {
while (true) {
const action = yield take('FETCH_USER');
const id = action.payload;
yield call(fetchUser, id);
}
}
Finalmente, debes iniciar tus sagas llamando a sagaMiddleware.run() y pasándole una función generator.
sagaMiddleware.run(watchFetchUser);
Luego, cada vez que se dispare una acción de tipo FETCH_USER, la saga watchFetchUser se encargará de llamar a la función fetchUser y manejar el resultado de la llamada a la API.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?