Я получаю данные из API погоды с помощью хука useEffect и правильно объявляю зависимость. Мое состояние все еще не обновляется, и из-за этого я получаю ошибки в моей функции рендеринга. Я почти пробовал все, от избавления от массива зависимостей до объявления кратных в массиве зависимостей. Я не знаю, что не так с моей функцией. Ответ API JSON имеет следующий формат:
{
location: {
name: "Paris",
region: "Ile-de-France",
},
current: {
last_updated_epoch: 1564279222,
last_updated: "2019-07-28 04:00",
temp_c: 16,
temp_f: 60.8,
is_day: 0,
condition: {
text: "Clear",
icon: "//cdn.apixu.com/weather/64x64/night/113.png",
code: 1000
},
wind_mph: 6.9,
wind_kph: 11.2
}
}
и вот как выглядит мой код:
const Weather = ({ capital }) => {
const [weather, setWeather] = useState(null);
useEffect(() => {
console.log("useEffect called");
const getWeather = async () => {
try {
const res = await axios.get(
`http://api.apixu.com/v1/current.json?key=53d601eb03d1412c9c004840192807&q=${capital}`
);
setWeather(res.data);
} catch (e) {
console.log(e);
}
};
getWeather();
}, [capital]);
console.log(weather);
return (
<Card style={{ width: "18rem", marginTop: "25px" }}>
<Card.Img variant="top" src={weather.current.condition.icon} />
<Card.Header style={{ textAlign: "center", fontSize: "25px" }}>
Weather in {capital}
</Card.Header>
</Card>
)
}
Я ожидаю, что мне будет показано изображение значка, но я получаю это сообщение об ошибке в своей функции рендеринга:
TypeError: Cannot read property 'current' of null
Weather
src/components/Weather.js:26
23 |
24 | return (
25 | <Card style={{ width: "18rem", marginTop: "25px" }}>
26 | <Card.Img variant="top" src={weather.current.condition.icon} />
| ^ 27 |
28 | <Card.Header style={{ textAlign: "center", fontSize: "25px" }}>
29 | Weather in {capital}
и мой console.log(weather)
возвращает значение null, исходное состояние, даже если оно вызывается после useEffect (), а console.log(useEffect called)
вообще не регистрируется, что означает, что useEffect не вызывается.
[capital]
- person Ru Chern Chong   schedule 30.07.2019[]
, но не работает. Однако мне нужно повторно отрендерить и обновить состояние, если капитал изменится, поэтому я точно знаю[]
, что это не ответ. - person Navjeet Kaur   schedule 30.07.2019