Ошибка при повторном отправке запроса

#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 верна.