一部のデータをAjaxリクエストで読み取ろうとしましたが、コードが正しいかどうかわかりません。ここでは、コードは次のとおりです。Reactjsで未定義のプロパティを読み取ることができません
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
それだけで未定義です。
データ例:
Uncaught TypeError: Cannot read property 'generatedDate' of undefined
Uncaught TypeError: Cannot read property 'meetings' of undefined
がどのように私はそれを読むことができます:私は '会議' または 'generatedDate' を読みたいときに同じエラーがMyListCmpで発生
{
"generatedDate": "12.12.2017",
"meetings": [
...
]
}
? render()またはreturn()のデータがまだフェッチされていない可能性がありますか?
私は、私はこのように行う場合のことを伝えることができます:
const data: IScheduler = {
generatedDate: "12.12.2017",
meetings: [
...
]
}
それは動作しますが、これはポイントではありません。私はいくつかのURLから取得する必要があります。 私はすべてのアドバイスをいただければ幸いです。
あなたのコンストラクタで 'this.getData'をバインドしてみてください。これをあなたのコンストラクタ 'this.getData = this.getData.bind(this)' –
@DhavalJardoshに追加すると、ありがたいですが、それは助けになりませんでした –