为了账号安全,请及时绑定邮箱和手机立即绑定

无法调用 JSON 对象的第一个元素

无法调用 JSON 对象的第一个元素

慕斯709654 2021-12-12 15:24:45
我正在尝试从data[]. 然后,使用获取密钥Object.keys()但它给了我这个错误:“类型错误:无法将未定义或空值转换为对象”。我需要输出是一个键数组。import React, { Component } from 'react';class CodecChart extends Component {  constructor(props) {    super(props);    this.state = {      post: [],      isLoaded: false,    }  }  componentDidMount() {    const url = 'https://jsonplaceholder.typicode.com/users';    fetch(url)      .then(result => result.json())      .then(post => {this.setState({ post: post })      })  }  render() {    const data = this.state.post;// cannot reach the first object of data[]    var keys = Object.keys(data[0]);    return (      <div>//output should be an array of the keys        <h5>{keys}</h5>      </div>    )  }}export default CodecChart;
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

第一次尝试访问时data[0],它仍然是空的:


this.state = {

  post: [],

  isLoaded: false,

}

并且const data = this.state.post;意味着data[0]未定义。


只有在安装了组件并且正确设置了data[0]定义的状态(或不设置,取决于 API 返回的内容)之后。


查看完整回答
反对 回复 2021-12-12
?
www说

TA贡献1775条经验 获得超8个赞

我找到了一种通过添加另一个“then”来使其工作的方法,因此它可以在设置“posts”状态后立即设置“keys”状态。但是我想知道是否有另一种方法可以使它更优雅。感谢您尝试提供帮助。


constructor(props) {

    super(props);

    this.state = {

      posts: [],

      isLoaded: false,

      keys: []

    }

  }


  componentDidMount() {

    const url = 'https://jsonplaceholder.typicode.com/users';

    fetch(url)

      .then(result => result.json())

      .then(posts => {

        this.setState({ posts: posts })

      })

      .then(_ => { this.setState({ keys: Object.keys(this.state.posts[0]) }) })

  }


  render() {

    const keys = this.state.keys;


    return (

      <div>

        <h5>{keys}</h5>

      </div>

    )

  }


查看完整回答
反对 回复 2021-12-12
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信