Задать вопрос
@IvanLu
Начинающий веб-разработчик

Почему не выходит вывести данные на старницу по Апи?

Мне приходят данные по апи (обьект) и я их заношу в стейт а потом хочу вывести их на страницу но почему-то получаю ошибку.
const [data, setData] = useState({});

  const fetchApi = (e: any) => {
    e.preventDefault();
    setLoading(true);
    axios.get(url).then((res) => {
      setData(res.data);
      console.log(data); // В консоль приходят необходимые данные 
    });
  };

 <h2>{data.weather[0]}</h2> // подсвечивается weather с ошибкой "any
Property 'weather' does not exist on type '{}'."


В чем я допустил ошибку? Раз в консоль все приходит значит фетчится все нормально...

Вот обьект:
{
    "coord": {
        "lon": -85.1647,
        "lat": 34.257
    },
    "weather": [
        {
            "id": 804,
            "main": "Clouds",
            "description": "overcast clouds",
            "icon": "04d"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 290.84,
        "feels_like": 290.6,
        "temp_min": 288.46,
        "temp_max": 292.76,
        "pressure": 1009,
        "humidity": 74
    },
    "visibility": 10000,
    "wind": {
        "speed": 3.09,
        "deg": 200
    },
    "clouds": {
        "all": 100
    },
    "dt": 1673464267,
    "sys": {
        "type": 2,
        "id": 2009938,
        "country": "US",
        "sunrise": 1673441225,
        "sunset": 1673477370
    },
    "timezone": -18000,
    "id": 4219762,
    "name": "Rome",
    "cod": 200
}
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Just__Den
FULL STACK
реакт сначала рендерит компонент, где:

1. отправляет запрос на сервер
2. видит пустой объект data, где не существует свойства weather. Выбрасывается ошибка
3. после уже приходят данные с сервера и он рендерит компонент ещё раз

минимальное решение

<h2>{data?.weather?.[0]}</h2>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@luxurypluxury
Попробуй вот так сделать:
useEffect(() => {
  (async () => {
            try {
                setIsLoading(true);
                const {data} = await axios.get(url);
                setData(data);
                setIsLoading(false);
            } catch (error) {
                alert('Ошибка при запросе данных :(');
                console.error(error);
            }
        })();

}, [])
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы