Evet var, çünkü setState
bir asynchronous
şekilde çalışıyor . Bu setState
, this.state
değişken çağrıldıktan sonra hemen değiştirilmediği anlamına gelir . bir durum değişkeninde durumu ayarladıktan hemen sonra bir eylem gerçekleştirmek ve ardından bir sonuç döndürmek istiyorsanız, geri arama yararlı olacaktır
Aşağıdaki örneği düşünün
....
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" });
}
},
....
Yukarıdaki kod beklendiği gibi çalışmayabilir, çünkü title
değişken üzerinde doğrulama yapılmadan önce mutasyona uğramamış olabilir. Şimdi, render()
işlevin kendisinde doğrulama gerçekleştirebileceğimizi merak edebilirsiniz, ancak bunu changeTitle işlevinde halledebilmemiz daha iyi ve daha temiz bir yol olurdu, çünkü bu kodunuzu daha organize ve anlaşılır hale getirecektir.
Bu durumda geri arama yararlıdır
....
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" });
}
},
....
Başka bir örnek dispatch
, durum değiştiğinde ve eylemde bulunmak olacaktır . bunu render()
her yeniden oluşturma gerçekleştiğinde çağrılacak şekilde değil, bir geri aramada yapmak isteyeceksiniz ve bu nedenle geri aramaya ihtiyaç duyacağınız birçok senaryo mümkündür.
Başka bir dava API Call
Belirli bir durum değişikliğine dayalı bir API çağrısı yapmanız gerektiğinde, oluşturma yönteminde bunu yaparsanız, her oluşturma onState
değişikliğinde veya bazı Prop Child Component
değiştirilene geçtiği için çağrılabilir .
Bu durumda setState callback
, güncellenmiş durum değerini API çağrısına iletmek için a kullanmak istersiniz.
....
changeTitle: function (event) {
this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
// Call API with the updated value
}
....