ReactJS-TypeError:无法读取未定义的属性“名称”
2019-04-30
2405
我正在从 API 中获取数据,我想在屏幕上显示一些对象 (例如“name”对象),但我收到以下错误:
“TypeError:无法读取未定义的属性‘name’”
我已经尝试在 API 请求后显示数据(使用布尔值)
有人知道可能是什么问题吗?
class App extends Component {
constructor(props) {
super(props)
this.state = {
products: {},
}
this.fetchDevices = this.fetchDevices.bind(this);
}
async fetchDevices() {
const url = 'my url';
const response = await fetch(url, {method : 'GET', headers : headers});
const data = await response.json()
this.setState({products : data.value})
}
componentDidMount() {
this.fetchDevices();
}
render() {
return (
<div>
{this.state.products ? <p>{this.state.products[0].name}</p> : null}
</div>
)}
}
export default App
{
"value": [
{
"urn": null,
"name": "New_COMEC",
"description": null,
"icon": "icon-energy-meter",
"customIdFormat": null,
"customIdDisplay": true,
"customIdRequired": true,
"serialNumberFormat": null,
"serialNumberDisplay": true,
"serialNumberRequired": false,
....,
}
]
1个回答
您已将产品状态初始化为空对象,而不是数组。 渲染方法将在您的提取调用之前调用,因此应用程序会中断。 由于您将其初始化为对象,
{this.state.products ? <p>{this.state.products[0].name}</p> : null}
在初始渲染中为真,因此当状态实际上是一个对象时,它会尝试获取第一个数组元素。
您的代码应该像
class App extends Component {
constructor(props) {
super(props)
this.state = {
products: [],
};
和
{Array.isArray(this.state.products) && this.state.products[0] ? <p>{this.state.products[0].name}</p> : null}
JiN
2019-04-30