Я использую axios для получения данных API погоды с помощью useEffect.
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { Header } from './Header';
export const CurrentCity = () => {
const [weather, setWeather] = useState({});
console.log('weather', weather);
console.log(weather.weather[0].icon);
useEffect(() => {
async function getData() {
const url = `https://api.openweathermap.org/data/2.5/weather?q=Berlin&appid=${process.env.REACT_APP_WEATHER_KEY}`;
try {
const response = await axios.get(url);
setWeather(response.data);
} catch (err) {
console.log(err);
}
}
getData();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<div>
<Header api={weather} />
</div>
);
};
Это результат console.log (данные):
{coord: {…}, weather: Array(1), base: "stations", main: {…}, visibility: 10000, …}
coord: {lon: 13.41, lat: 52.52}
weather: Array(1)
0: {id: 802, main: "Clouds", description: "scattered clouds", icon: "03n"}
length: 1
__proto__: Array(0)
base: "stations"
main: {temp: 278.43, feels_like: 270.3, temp_min: 276.48, temp_max: 280.37, pressure: 1009, …}
visibility: 10000
wind: {speed: 8.7, deg: 270, gust: 13.9}
clouds: {all: 40}
dt: 1584060559
sys: {type: 1, id: 1275, country: "DE", sunrise: 1584077086, sunset: 1584119213}
timezone: 3600
id: 2950159
name: "Berlin"
cod: 200
__proto__: Object
Если я console.log данные, которые я получаю
console.log('weather', weather);
console.log(weather.weather[0].icon);
в сообщениях об ошибках говорится, что он не может прочитать свойство [0],
или, например, если я попытаюсь проникнуть глубже в "ветер",
console.log(weather.wind.speed);
он говорит, не может прочитать свойство скорости.
Если это массив, к которому я хочу получить доступ, я бы использовал [0] или, если это объект, я бы использовал точечную нотацию.
Кроме того, я передаю данные, полученные от axios, в Header.js.
import React from 'react';
export const Header = props => {
console.log(props.api.name);
return (
<div>
<h1>{props.api.name}</h1>
</div>
);
};
То же самое происходит, когда я пытаюсь глубже изучить другие данные.
Я хотел бы узнать, что мне не хватает, заранее всем спасибо! А также хочу знать, в чем разница между 1 и 2, и какой из них я должен использовать в текущей ситуации.
const [weather, setWeather] = useState({});
const [weather, setWeather] = useState(null);
console.log(weather.weather[0].icon);
, погода просто инициализируется на{}
, поэтому вы видите сообщение об ошибке в консоли. - person sam   schedule 13.03.2020weather
инициализируется как{}
в 1-м иnull
во 2-м. - person Dev   schedule 13.03.2020