reactjs - 访问包含对象数组的状态
问题描述
如果这是一个基本问题,我深表歉意,但我真的很困惑为什么这不起作用。我有一个组件可以调用 API 来获取数据,并且数据成功返回,我可以执行 console.log 并按预期查看对象数组。
.then((result) => {
this.setState({
surveyData: result,
surveyYear: result[0].year
});
console.log(result); <--- This logs an array of objects as expected
console.log(this.state.surveyData); <-- This logs an empty array
console.log(this.state.surveyYear); <-- This logs what I expect
})
当我使用 return 组件时,我得到了我的期望:
render(){
return(
<p>{this.state.surveyYear}</p> <--- this shows exactly what I'd expect
)
}
但是,如果我执行以下操作,它应该显示完全相同的数据,但相反,我收到此错误:TypeError: Cannot read properties of undefined (reading '0')
是否可以这样做?
render(){
return(
<p>{this.state.surveyData[0].year</p> <--- I want to access the data this way instead
)
}
解决方案
这是反应中的一个常见陷阱。问题是更新状态不是即时的。这就是为什么在调用setState
. 同样,在 render 方法中,您需要防止该数据尚不可用。
如果您 babel 代码并支持可选的链接运算符:
render(){
return(<p>{this.state.surveyData?.[0]?.year</p>)
}
否则
render(){
return(<p>{this.state.surveyData && this.state.surveyData[0] && this.state.surveyData[0].year</p>)
}
推荐阅读
- javascript - 如何在这个数组中添加所有值?它每次都创建一个新的 CLIENT 数组并将值推送给它
- go - 通过client-go在端口转发中升级连接错误
- opengl - OpenGL 网格 + 镜像变换 = 错误的光照
- react-native - Pod install 在升级 react-native 版本后删除 React
- javascript - 编写通用的 React 输入钩子
- excel - 缩短大小写选择 [公式填充] 代码,因为过程太大
- android - Android fastindex 滚动回收器视图
- pip - 在 GCP Composer Airflow 上安装私有依赖的任何成功案例?
- interrupt - 为什么我无法使用 STM32 中的中断通过 UART 传输消息?
- azure - Azure DataFactory 复制作业以目标文件的名称复制扩展名