【发布时间】:2017-12-11 00:06:30
【问题描述】:
我尝试通过一些 ajax 请求读取一些数据,但我不确定我的代码是否正确。代码如下:
interface IProps {
data: IScheduler;
}
interface IState {
list: IScheduler;
}
export default class Page extends React.Component<IProps, IState> {
constructor(props: IProps) {
super(props);
this.state = {
list: this.props.data,
};
}
public componentWillMount() {
this.getData();
}
public getData = () => {
axios.get(myURL)
.then( (response) => {
this.setState({list: response.data});
console.log(response.data.generatedDate); //works
})
.catch( (error) => {
console.log("DIDN'T CATCH DATA", error);
});
}
public render(): JSX.Element {
const data: IScheduler = this.state.list;
// getting an error
console.log(data.creationDate);
return (
<div className="container">
<MyListCmp data={data}/>
</div>
);
}
我看到了错误:
Uncaught TypeError: Cannot read property 'list' of undefined
当我尝试时:
console.log(data); // or this.state.list
只是未定义。
数据示例:
{
"generatedDate": "12.12.2017",
"meetings": [
...
]
}
当我想读取 'meetings' 或 'generatedDate' 时,MyListCmp 中也会出现同样的错误:
Uncaught TypeError: Cannot read property 'generatedDate' of undefined
Uncaught TypeError: Cannot read property 'meetings' of undefined
如何阅读? 这可能是在 render() 或 return() 中的数据尚未获取吗?
如果我这样做,我可以说:
const data: IScheduler = {
generatedDate: "12.12.2017",
meetings: [
...
]
}
它有效,但这不是重点。我需要从某个 URL 获取它。 我会感激每一个建议。
【问题讨论】:
-
尝试在你的构造函数中绑定
this.getData。通过在你的构造函数中添加这个this.getData = this.getData.bind(this) -
@DhavalJardosh,谢谢,但没有帮助
标签: ajax reactjs typescript undefined axios