开发者问题收集

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