Ya ada, karena setState
bekerja dengan asynchronous
cara tertentu. Itu berarti setelah memanggil setState
yang this.state
variabel tidak segera berubah. jadi jika Anda ingin melakukan tindakan segera setelah menetapkan status pada variabel keadaan dan kemudian mengembalikan hasilnya, panggilan balik akan berguna
Perhatikan contoh di bawah ini
....
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" });
}
},
....
Kode di atas mungkin tidak berfungsi seperti yang diharapkan karena title
variabel mungkin tidak bermutasi sebelum validasi dilakukan di atasnya. Sekarang Anda mungkin bertanya-tanya bahwa kita dapat melakukan validasi dalam render()
fungsi itu sendiri tetapi akan lebih baik dan lebih bersih jika kita dapat menangani ini dalam fungsi changeTitle sendiri karena itu akan membuat kode Anda lebih terorganisir dan dapat dipahami
Dalam hal ini panggilan balik berguna
....
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" });
}
},
....
Contoh lain adalah ketika Anda ingin dispatch
dan bertindak ketika negara berubah. Anda akan ingin melakukannya dalam panggilan balik dan bukan render()
seperti yang akan disebut setiap kali rerendering terjadi dan karenanya banyak skenario seperti itu mungkin terjadi di mana Anda akan membutuhkan panggilan balik.
Kasus lain adalah a API Call
Suatu kasus dapat muncul ketika Anda perlu melakukan panggilan API berdasarkan perubahan status tertentu, jika Anda melakukannya dalam metode render, itu akan dipanggil pada setiap onState
perubahan render atau karena beberapa Prop diturunkan ke Child Component
perubahan.
Dalam hal ini Anda ingin menggunakan a setState callback
untuk meneruskan nilai status yang diperbarui ke panggilan API
....
changeTitle: function (event) {
this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
// Call API with the updated value
}
....