【问题标题】:How can I properly read json data from ajax response?如何从 ajax 响应中正确读取 json 数据?
【发布时间】:2018-05-23 05:18:02
【问题描述】:

我做了这样的事情:

axios.get(url).then(result => {
   this.setState({
     list: result.data,
   });
})
.catch(e => { 
   console.log("Some error", e);
});

构造函数如下所示:

constructor(props: any) {
   super(props);
   this.state = {
       list: [],
   };
}

我想把它放在某个地方并检查它是否有效:

const {fetchedData}: any = this.state;
const data: IScheduler = fetchedData.list;

但我得到未捕获的 TypeError: cannot read property 'list' of undefined...

当我这样做时它会起作用:

const data: IScheduler = {
      generatedDate: "03.12.2017";
      subjects: [
          ....
      ],
};

但这不是重点。我究竟做错了什么?我应该如何解决它?有人可以帮帮我吗?

【问题讨论】:

    标签: json ajax reactjs typescript axios


    【解决方案1】:

    在您所在的州,没有财产fetchedData。您将列表设置为 this.state.list,而不是 this.state.fetchedData.list。所以你需要改变你的代码:

    const {fetchedData}: any = this.state;
    const data: IScheduler = fetchedData.list;
    

    到:

    const {list}: any = this.state;
    const data: IScheduler = list;
    

    它应该工作。如果你真的想要你的第一个数据结构你需要改变你的默认状态结构和setState,但是不推荐嵌套数据结构

    axios.get(url).then(result => {
       this.setState({
         fetchedData: {
           list: result.data
         }
       });
    })
    .catch(e => { 
       console.log("Some error", e);
    });
    

    构造函数应该如下所示:

    constructor(props: any) {
       super(props);
       this.state = {
           fetchedData: {
             list: []
           }
       };
    }
    

    【讨论】:

    • 谢谢!还有一个问题。我想将 generatedDate 属性写入控制台(只是为了确保一切正常)。所以我输入:console.log(data.generatedDate);但我得到同样的错误。我该怎么做?
    • 在不知道数据结构的情况下,我无能为力,但我猜数据不存在 jet 尝试 console.log(data)。
    • Hmm.. 就本示例而言,IScheduler 结构将是这样的 { generatedDate: string; } 和 json 数据将是 { "generatedDate": "03.12.2017", }。 console.log(data.generatedDate) 应该写入控制台'03.12.2017',但发生错误。当我尝试 console.log(data) 时,我得到“未定义”。
    • 我改变了构造函数。现在,console.log(data) 将一个状态数组写入控制台,而没有 generateDate 属性。无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 2019-07-13
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2020-09-23
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多