如何从ajax响应中正确读取json数据?

时间:2017-12-08 22:39:58

标签: json ajax reactjs typescript axios

我做了类似的事情:

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:无法读取未定义的属性'list'...

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

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

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

1 个答案:

答案 0 :(得分:0)

在您所在的州,没有财产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: []
       }
   };
}