Ich versuche, einen einfachen Abruf durch die componentDidMount
Lifecycle-Methode zu tun. Das Ergebnis erscheint jedoch nicht auf der Seite, es sei denn, ich habe eine Zeitüberschreitung von einer Sekunde. Ich habe festgestellt, dass dies auf die asynchrone Art des Abrufs zurückzuführen ist, aber wie kann ich das beheben, ohne setTimeout
verwenden zu müssen? Würde componentDidUpdate
arbeiten/wie würdest du es benutzen?Lifecycle-Methoden reagieren: fetch in componentDidMount
constructor(props) {
super(props);
this.state = { value: '' };
this.getValue= this.getValue.bind(this);
}
getValue() {
return (
fetch(url, {
method: 'GET',
}).then(response => {
if (response.status >= 400) {
throw new Error('no response: throw');
}
return response.json()
}).then(response => {
this.setState({value: response});
}).catch((error) => {
this.setState({
value: 'no response: catch'
})
})
);
}
componentDidMount(){
//this.getValue(); //does not work
setTimeout(() => this.getValue(), 1000); //this works & populates page
}
render() {
return (
<div>
<div>{this.state.value}</div>
</div>
)
}
es ist normale Methode aufrufen, Bindung ist nicht erforderlich .. :) –
Was meinst du? 'this.setState' setzt voraus, dass' this' an die Komponenteninstanz gebunden ist. Sein Code-Snippet zeigt nicht, wo das geschieht, und wie es geschrieben steht, ruft er es aus dem Kontext von 'fetch'. –
überprüfen Sie diese Antwort Sie werden verstehen, wann und warum Bindung erforderlich ist. [** Link **] (https://stackoverflow.com/a/41391426/5185595) :) –