因此,我在 Stack 和 Web 上偶然发现了很多示例,其中从异步获取调用访问深层嵌套对象返回未定义。许多答案都解决了其他文章,从而导致了对象和数组的访问方式。其他人声称这是异步操作的原因。但我实在无法理解它。
这是数据:
base: "stations"
clouds: {all: 1}
cod: 200
coord: {lon: -81.38, lat: 28.54}
dt: 1607561322
id: 4167147
main: {temp: 51.28, feels_like: 45.97, temp_min: 48.99, temp_max: 53.6, pressure: 1021, …}
name: "Orlando"
sys: {type: 1, id: 5234, country: "US", sunrise: 1607515628, sunset: 1607552963}
timezone: -18000
visibility: 10000
weather: [{…}]
wind: {speed: 4.52, deg: 271}
这是代码,注意 useEffect 回调中的 setWeatherData
function WeatherDisplay(props){
const [weatherData, setWeatherData] = useState({})
useEffect(() => {
fetch(`http://api.openweathermap.org/data/2.5/weather?q=Orlando&units=imperial&appid=3abd9c2df6a249e8abcf4f812de0a627`)
.then(res => res.json())
.then(data => {
setWeatherData({
data,
name: data.name,
main: data.main,
...data.main
})
})
.catch(err => console.log(err))
}, [])
return(
<>
<Media style={{backgroundColor: "gray", borderRadius: "5px", height: "5.5rem"}}>
<IconContext.Provider value={{size: "5rem", style:{fontWeight: "200"}, className:"align-self-center"}}>
<TiWeatherPartlySunny />
</IconContext.Provider>
{console.log(weatherData)}
{console.log(weatherData.name)}
{console.log(weatherData.main)}
{console.log(weatherData.temp)}
</Media>
</>
)
}
https://i.stack.imgur.com/8aEj7.png
这就是首先开始的方式,我只是将WeatherData设置为数据,因为我可以渲染weatherData.name(奥兰多),但由于某种原因weatherData.main.temp返回错误,因为weatherData.main导致未定义。我四处询问,他们说这是因为承诺并且它是异步的,所以我必须使用条件等等,但这仍然不能解释它如何能够访问weatherData.name。与weatherData.clouds和.sys相同
我继续传播我想要的对象的值,但我可以想到我的解决方法没有用的简单情况。
我想知道这是否是反应保存深度嵌套对象的值的方式,但我真的不知道。
UYOU
三国纷争
慕工程0101907
相关分类