Ja gibt es, da setState
funktioniert in gewisser asynchronous
Weise. Das heißt, nach dem Aufruf wird setState
die this.state
Variable nicht sofort geändert. Wenn Sie also unmittelbar nach dem Festlegen des Status für eine Statusvariable eine Aktion ausführen und dann ein Ergebnis zurückgeben möchten, ist ein Rückruf hilfreich
Betrachten Sie das folgende Beispiel
....
changeTitle: function changeTitle (event) {
this.setState({ title: event.target.value });
this.validateTitle();
},
validateTitle: function validateTitle () {
if (this.state.title.length === 0) {
this.setState({ titleError: "Title can't be blank" });
}
},
....
Der obige Code funktioniert möglicherweise nicht wie erwartet, da die title
Variable möglicherweise nicht mutiert ist, bevor die Validierung durchgeführt wird. Jetzt fragen Sie sich vielleicht, ob wir die Validierung in der render()
Funktion selbst durchführen können, aber es wäre besser und sauberer, wenn wir dies in der changeTitle-Funktion selbst handhaben könnten, da dies Ihren Code organisierter und verständlicher machen würde
In diesem Fall ist ein Rückruf hilfreich
....
changeTitle: function changeTitle (event) {
this.setState({ title: event.target.value }, function() {
this.validateTitle();
});
},
validateTitle: function validateTitle () {
if (this.state.title.length === 0) {
this.setState({ titleError: "Title can't be blank" });
}
},
....
Ein weiteres Beispiel ist, wann Sie möchten dispatch
und wann sich der Status ändert. Sie möchten dies in einem Rückruf tun und nicht so, render()
wie es bei jedem erneuten Rendern genannt wird. Daher sind viele solcher Szenarien möglich, in denen Sie einen Rückruf benötigen.
Ein anderer Fall ist a API Call
Ein Fall kann auftreten, wenn Sie einen API-Aufruf basierend auf einer bestimmten Statusänderung ausführen müssen. Wenn Sie dies in der Render-Methode tun, wird dieser bei jeder Render- onState
Änderung aufgerufen oder weil ein Prop an die Child Component
Änderung weitergegeben wurde.
In diesem Fall möchten Sie a verwenden setState callback
, um den aktualisierten Statuswert an den API-Aufruf zu übergeben
....
changeTitle: function (event) {
this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
// Call API with the updated value
}
....