![](/img/trans.png)
[英]What is the right way to toggle a value inside object state in React hooks?
[英]What is the right way to assign element of an array to state using React hooks?
我正在制作基于 api 的简单天气应用程序
在功能组件的开头,我声明了这一点
const [pressure, setPressure] = useState("")
const [hourTemp, setHourTemp] = useState([])
然后我使用 fetch() 从 api 下载数据 object 并将值分配给 state。 压力(例如)是单个值,但在我的应用程序中,我需要每小时预测,所以我采用整个每小时数组并对其进行过滤(它有 48 小时,我只需要 10 小时)。
setPressure(data.current.pressure)
let newArray = data.hourly.filter(a => {
return data.hourly.indexOf(a) < 10
})
创建 newArray 后,我可以 console.log 它和它完全按照我想要的方式打印 10 个对象的数组。
但是当我将此数组分配给 state
setHourTemp(newArray)
然后传递一个元素作为道具,它返回未定义
<WeatherBlock temp={hourTemp[0].temp}/> //TypeError: hourTemp[0] is undefined
尝试添加一个空/空验证来检查您的数组是否有效。
有很多方法可以做到这一点,但要测试:
{hourTemp ? <WeatherBlock temp={hourTemp[0].temp}/> : <></> }
因为您使用的是异步 function 的fetch
,所以加载数据需要时间。 当您第一次调用/渲染hourTemp[0]
时,数据仍然是空的,并且它返回未定义的错误。 所以你需要验证数据是否存在。 有很多方法可以做到这一点:
<WeatherBlock temp={hourTemp[0] ? hourTemp[0].temp : 0}/>
if(hourTemp[0]){
return <WeatherBlock temp={hourTemp[0].temp}/>
} else {
return <WeatherBlock temp={0}/>
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.