Redux Loop - это библиотека, которая позволяет вам запускать побочные эффекты от ваших редукторов в чистом и тестируемом виде, портируя архитектуру elm на redux. Он выполняет те же функции, что и redux-thunk и redux-saga.
Вот пример, где вы можете инициировать выборку и описать, как обрабатывать успехи и неудачи, все из вашего редуктора.
//reducer.js
import { loop, Cmd } from 'redux-loop';
const initialState = {
loading: false,
data: null,
error: null
}
function reducer(state = initialState, action){
if(action.type === 'pageLoaded'){
const newState = {...state, loading: true};
const cmd = Cmd.run(fetchData, {
successActionCreator: dataLoaded,
failActionCreator: dataLoadFailed,
args: [action.itemId]
});
return loop(newState, cmd);
}
else if(action.type === 'dataLoaded'){
return {
...state,
loading: false,
data: action.data,
error: null
};
}
else if(action.type === 'dataLoadFailed'){
return {
loading: false,
error: action.error
};
}
return state;
}
export default reducer;
Обратите внимание, что fetchData на самом деле никогда не вызывается из вашего редуктора, так что это по-прежнему чистая функция, которая просто возвращает данные и легко тестируется.
Вы бы сужали ее за циклРеактивное приложение по той же причине, по которой вы использовали бы его в обычном реактивном приложении с избыточностью, то есть само по себе избыточное не обеспечивает способ прямого запуска побочных эффектов из избыточного кода. Вместо этого он позволяет вам самим решать, как вы хотите это сделать, позволяя писать промежуточное программное обеспечение и хранить энхансеры для redux, что представляет собой избыточный цикл.
Подробнее об этом можно прочитать на https://redux -loop.js.org /
Примечание: я поддерживаю избыточный цикл