我有一些带json的URL,需要读取数据。 为了这个例子,json看起来像这样:
{
"results": [
...
],
"info": {
...
}
}
我想将获取的数据作为组件的属性返回。 最好的方法是什么? 我试图用axios做到这一点。我设法获取数据,但在render()方法中的setState之后,我收到了一个空对象。这是代码:
export default class MainPage extends React.Component {
constructor(props: any) {
super(props);
this.state = {
list: {},
};
}
public componentWillMount() {
axios.get(someURL)
.then( (response) => {
this.setState({list: response.data});
})
.catch( (error) => {
console.log("FAILED", error);
});
}
public render(): JSX.Element {
const {list}: any = this.state;
const data: IScheduler = list;
console.log(data); // empty state object
return (
<div className="main-page-container">
<MyTable data={data}/> // cannot return data
</div>
);
}
}
我不知道为什么在render()方法中数据已经消失了。如果我把
console.log(response.data);
在.then部分,我得到状态为200的数据。
所以我现在问,是否有其他方法可以做到这一点。 我将不胜感激任何帮助。
---- ----更新 在MyTable组件中,我在此之后出错:
const flightIndex: number
= data.results.findIndex((f) => f.name === result);
错误是:
Uncaught TypeError: Cannot read property 'findIndex' of undefined
这里有什么问题?如何判断这不属于财产?
答案 0 :(得分:1)
在返回请求之前,React将尝试渲染您的组件。然后,一旦请求完成并返回了数据,react将在setState调用之后重新呈现您的组件。
问题是您的代码未说明空/未定义的数据对象。只需添加支票即可,即
if (data && data.results) {
data.results.findIndex(...);
} else {
// display some loading message
}
答案 1 :(得分:0)
在React中,在将ajax结果存储在组件的状态(您似乎正在执行)之后,可以通过调用this.state.list来检索该结果
因此,为确保此功能正常,请尝试<MyTable data={this.state.list}>