हाँ, setStateएक asynchronousतरह से काम करता है । इसका मतलब है कि चर को कॉल setStateकरने के बाद this.stateतुरंत नहीं बदला जाता है। इसलिए यदि आप एक राज्य चर पर राज्य की स्थापना के तुरंत बाद एक कार्रवाई करना चाहते हैं और फिर एक परिणाम लौटाते हैं, तो कॉलबैक उपयोगी होगा
नीचे दिए गए उदाहरण पर विचार करें
....
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" });
}
},
....
उपरोक्त कोड उस तरह से काम नहीं कर सकता है जैसा कि titleवेरिएबल उस पर सत्यापन किए जाने से पहले नहीं किया गया है। अब आपको आश्चर्य हो सकता है कि हम render()फ़ंक्शन में ही सत्यापन कर सकते हैं, लेकिन यह बेहतर और साफ-सुथरा तरीका होगा यदि हम इसे परिवर्तन फ़ंक्शन में ही संभाल सकते हैं क्योंकि इससे आपका कोड अधिक व्यवस्थित और समझ में आता है
इस मामले में कॉलबैक उपयोगी है
....
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" });
}
},
....
एक और उदाहरण तब होगा जब आप चाहते हैं dispatchऔर जब राज्य बदल गया तो कार्रवाई करें। आप इसे कॉलबैक में करना चाहेंगे, न कि render()जैसा कि यह कहा जाता है कि हर बार पुनरावृत्ति होती है और इसलिए कई ऐसे परिदृश्य संभव हैं जहां आपको कॉलबैक की आवश्यकता होगी।
एक और मामला है API Call
जब आप किसी विशेष राज्य परिवर्तन के आधार पर एपीआई कॉल करने की आवश्यकता होती है, तो एक मामला उत्पन्न हो सकता है, यदि आप रेंडर विधि में ऐसा करते हैं, तो इसे हर रेंडर onStateपरिवर्तन पर कॉल किया जाएगा या क्योंकि कुछ प्रोप Child Componentपरिवर्तित हो गए हैं।
इस स्थिति में आप setState callbackएपीआई कॉल में अद्यतन राज्य मान को पारित करने के लिए एक का उपयोग करना चाहते हैं
....
changeTitle: function (event) {
this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
// Call API with the updated value
}
....