PolyakhAleksandr
@PolyakhAleksandr

Универсальный fetch, очень большое количество запросов, с разными условиями, как написать правильно?

Связка Redux/React
Как понимаю, описать все запросы и действия в одном actionCreators не верно.
Подскажите пожалуйста, как грамотно написать actionCreator для запросов?
01. Первый запрос, получили от сервера данные, в зависимости, что получили седлали определенные действия;
02. Отправили второй запрос, проверили, что вернул сервер, выполнили определенные действия
03 и так далее.
Подскажите пожалуйста, как грамотно, составить данный функционал?
Сейчас у меня вся, логика находиться в одном actionCreators.
Пример как выглядит сейчас actionCreators, передаю его через container, вызываю через this.props в компоненте:
export function fetchApp(url, payload) {
return (dispatch) => {
fetchRequest();
const status = function(response) {
if (response.status !== 200) {
return Promise.reject(new Error(response.statusText));
}
return Promise.resolve(response);
};
const json = function(response) {
return response.json();
};
fetch(url, {
method: 'post',
credentials: 'same-origin'
})
.then(status)
.then(json)
.then(function(data) {
let currentComponent = setComponent(data);
dispatch(fetchSuccess(currentComponent));
console.log('data', data);
})

};
}
  • Вопрос задан
  • 450 просмотров
Решения вопроса 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Не вникая в код, в логику и так далее, просто если взять за должное, что вы должны один Action creator (или для удобства, просто "экшен") запускать после результата другого, то тут важное правило лишь одно: экшен должен быть вызван внутри функции dispatch - и все будет ок. Главное, чтобы экшен "не выпал" из потока экшенов идущих через диспетчер, в таком случае он обязательно попадет в редьюсеры и все будет как надо.

p.s. судя по вашему коду вы так и делаете. Если будет удобно разбивайте функцию на более мелкие повторяющиеся кусочки и т.д. (но вижу, что и это уже тоже делаете).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы