হ্যাঁ আছে, যেহেতু 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()
ফাংশনটিতেই বৈধতাটি সম্পাদন করতে পারি তবে এটি আরও ভাল এবং একটি ক্লিনার উপায় হ'ল যদি আমরা এটি চেঞ্জিটল ফাংশনটিতে নিজে পরিচালনা করতে পারি যেহেতু এটি আপনার কোডকে আরও সুসংহত এবং বোধগম্য করে তুলবে
এই ক্ষেত্রে কলব্যাক দরকারী useful
....
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
API কলটিতে আপডেট হওয়া রাষ্ট্রীয় মানটি পাস করতে একটি ব্যবহার করতে চান
....
changeTitle: function (event) {
this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
// Call API with the updated value
}
....