Я пытаюсь получить API WeatherApp, используя геолокацию. Моя проблема заключается в рендеринге: Это не позволяет мне отображать страницу до получения (но после того, как мне каким-то образом удается получить, код работает).
Возврат сообщения об ошибке:
Type Error : Cannot Read Property 'temp' of undefined
import React, { useState } from 'react';
import './App.css';
import Axios from 'axios';
function App() {
const [ positionLat, setPositionLat ] = useState('') ;
const [ positionLong, setPositionLong] = useState('') ;
navigator.geolocation.getCurrentPosition(function(position) {
setPositionLat(position.coords.latitude);
setPositionLong(position.coords.longitude);
});
const [weather, setWeather] = useState('');
const fetchingWeather = () => {
Axios.get(
`https://api.openweathermap.org/data/2.5/weather?lat=${positionLat}&lon=${positionLong}&appid={API_KEY}&units=metric`)
.then((res) => {
console.log(res.data.main.temp)
setWeather(res.data)
})
}
// this line is returning the error
console.log(weather.main.temp)
return (
<div className="App">
<p>lattitude :{positionLat}</p>
<p>longitude :{positionLong}</p>
<button onClick={fetchingWeather}>Cliquez moi pour fetch</button>
</div>
);
}
export default App;
Состояние настройки асинхронное; ваш
console.log
будет запущен до завершения запроса.Вы не устанавливаете состояние
weather
, пока не выполнитеfetchingWeather()
, и вы вызываете его только при нажатии кнопки. Рассматриваемая строкаconsole
запускается, когда ваш компонент визуализирует, поэтомуweather
на этом этапе будет пустой строкой. При этом вы нигде не используетеweather
, совершенно неясно, в чем проблема.но как мне это сделать?