Я использую топор ios для получения данных 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 (data):
{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] или, если это объект, я бы использовал точечную нотацию.
Более того, я передаю данные, полученные из топора ios, в заголовок. js
import React from 'react';
export const Header = props => {
console.log(props.api.name);
return (
<div>
<h1>{props.api.name}</h1>
</div>
);
};
То же самое происходит, когда я пытаюсь go глубже проникнуть в другой data.
Хотелось бы узнать, чего мне не хватает, Заранее всем спасибо! А также хотите узнать, в чем разница между 1 и 2, и какой из них мне следует использовать для текущей ситуации.
const [weather, setWeather] = useState({});
const [weather, setWeather] = useState(null);