Получить статус запроса ReactJS

115
19 июня 2019, 12:10

Получаю ответ от API OpenWeatherMap. Каким образом можно было бы получить код ответа и в зависимости от него отобразить контент? К примеру, если статус 404 то вывести ...

Answer 1

Простой и примитивный пример. Добавим в конструкторе в state несколько параметров:

constructor(props) {
  super(props);
  this.state = {
    loading: true, // режим загрузки
    statusCode: null, // статус ответа
  }
}

Конструктор может содержать и другой код, но для примера мы определили две переменные в стейте, loading - режим загрузки, как только мы попадаем в конструктор, проставляем сюда true, как только мы получим ответ от API - поменяем этот параметр, и, соответственно и statusCode поменяем - запишем туда код ответа. Далее, к примеру внутри метода componentDidMount делаем отправку запроса:

componentDidMount() {
   fetch... // тут ваш API запрос
     .then((response) => {
       this.setState({ loading: false, statusCode: response.status });
     })
     .catch((error) => {
       console.error(error);
       this.setState({ loading: false });
     });
}

А внутри рендеринга добавим простые проверки на статус и загрузку из state:

render() {
  // ответ пока не получен - загрузка
  if (this.state.loading) {
    return (<p>Loading...</p>);
  }
  // ответ получен, но нет статуса ответа (смотри консоль)
  if (!this.state.loading && !this.state.statusCode) {
    return (<p>Something went wrong. See console logging.</p>);
  }
  // ответ получен, статус 200
  if (this.state.statusCode === 200) {
    return (<p>All good</p>);
  }
  // ответ получен, статус 404    
  if (this.state.statusCode === 404) {
    return (<p>Not found</p>);
  }
  // ответ получен, остальные статусы
  return (<p>Unexpected status code: {this.state.statusCode}</p>);
}

Полезные ссылки для изучения:

  • render()
  • componentDidMount()
  • console.error()
READ ALSO
Изображение в массиве

Изображение в массиве

Как мне передать картинку через массив? Имеется массив Const LocalStorage = [ { Id: 1, Name: "one" … } … ]

89
Перейти к следующему фото в альбоме вконтакте с помощью javascript

Перейти к следующему фото в альбоме вконтакте с помощью javascript

Нашел селектор, который отвечает за переход к следующему фото из альбома вконтакте: #pv_nav_btn_right хотел перейти таким образом:

84
Как правильно использовать React-router в моем случаи?

Как правильно использовать React-router в моем случаи?

Такая ситуация: Есть главная страница indexhtml, на ней вообще не используется React, на главной странице есть ссылка на страницу на которой используется...

98
Как уменьшить количество символов

Как уменьшить количество символов

Есть скрипт на JavaScript принимаюший n строк и находящий наибольшую общую подстроку

120