javascript - 从数据库中获取对象数组并用反应显示它
问题描述
当我遇到这个问题时,我试图获取一个对象数组。抱歉我的代码混乱,我是初学者。
export class App extends Component {
state ={
character:[]
}
componentDidMount(){
fetch('https://swapi.dev/api/people/').then(data => data.json()).then(res =>{
this.setState(() =>{
const ar = res.results
return {
character: ar
}
})
})
}
render() {
return (
<div>
test
{console.log(this.state.character[0])}
</div>
)
}
}
该代码起初对我来说很好,直到我将控制台日志更改为{console.log(this.state.character[0].name)}
“无法读取未定义的属性”,即使第一行完美地显示了对象
解决方案
您的App
组件componentDidMount
在第一次挂载后执行的生命周期方法中获取数据。{console.log(this.state.character[0].name)}
显示错误“无法读取属性,undefined
因为当组件第一次安装时,数据尚不可用,这意味着this.state.character
仍然是一个空数组。所以当尝试访问时this.state.character[0].name
,就像说给我它的值undefined.name
会给你一个错误,因为name
属性不存在于 上undefined
。要解决此问题,您可以检查是否character.length
在条件中,然后尝试访问.name
。
例子
render() {
return (
<div>
test
{this.state.character.length && <p>{this.state.character[0].name}</p>}
</div>
)
}
推荐阅读
- tsql - 将括号拆分为列 - SSMS
- intellij-idea - Clojure 和 Groovy 集成问题:依赖关系
- angularjs - 如何使用自定义编译指令进行 $compile
- python - 在函数中使用 lambda
- php - 当短代码中有短代码时,将 do_shortcode() 替换为直接函数
- c++ - C++ 在避免内存泄漏方面是否比 C 更好?
- c - 如何在下一次递归调用中从二维数组中的下一列\行开始?(C)
- css - 图标在不同设备上的视口和像素密度变得模糊
- ionic4 - 在 Ionic 4 中更改吐司消息的颜色?
- ios - 使用多个字符串创建 onDoneBlock