#redux #axios #redux-thunk
#повторное выполнение #axios #ошибка при повторном отправке
Вопрос:
У меня есть запросы GET, и обычно, когда они завершаются успешно, я сохраняю данные в хранилище, но для запросов POST мне нужно знать, удалось ли это или нет, чтобы выполнить некоторый код (показать сообщение и перенаправить), в документе говорится, что вы можете использовать переменную isLoading, но там просто сказано, работает ли служба, но не удалось ли, если я попытаюсь создать новую переменную успеха в хранилище, она будет включена навсегда после запроса, и мне это тоже не нужно. Я попытался вернуть обещание от создателя действия и обработать ответ непосредственно внутри компонента, но, похоже, то же самое, что вызывать axios там вместо использования redux.
Мой создатель действий выглядит следующим образом:
export function createProject(userId, projectName) {
return function (dispatch) {
dispatch({ type: projectsActions.START_CREATE_PROJECT });
return ProjectsService.createProject(userId, projectName).then(() => {
dispatch({ type: projectsActions.SUCCESS_CREATE_PROJECT });
}).catch((error) => {
dispatch({ type: projectsActions.ERROR_CREATE_PROJECT });
throw error;
});
}
}
Ответ №1:
Я понимаю, откуда берутся ваши сомнения, не кажется уместным иметь поле в вашем хранилище Redux только для того, чтобы узнать об успехе одноразового запроса.
Если вам нужно выполнить запрос post и позаботиться о его результате только один раз, самый простой способ сделать это — использовать state в компоненте, отправляющем запрос. Состоянием на уровне компонента легко управлять, оно удаляется из памяти при размонтировании компонента, но, с другой стороны, вы можете захотеть иметь единый источник достоверности для вашего приложения. Вы должны сделать выбор, но ваша реализация Redux верна.