আপনাকে পার্থক্যগুলি দেখানোর জন্য প্রতিক্রিয়া (ঘোষণামূলক) এবং জিকুয়েরি (আবশ্যক) তুলনা করা ভাল।
প্রতিক্রিয়া হিসাবে, আপনাকে কেবল আপনার ইউআই এর চূড়ান্ত অবস্থাটি render()পদ্ধতিতে বর্ণনা করতে হবে , কীভাবে পূর্ববর্তী ইউআই রাষ্ট্র থেকে নতুন ইউআই অবস্থায় রূপান্তর করা যায় তা নিয়ে চিন্তা না করেই। যেমন,
render() {
const { price, volume } = this.state;
const totalPrice = price * volume;
return (
<div>
<Label value={price} className={price > 100 ? 'expensive' : 'cheap'} ... />
<Label value={volume} className={volume > 1000 ? 'high' : 'low'} ... />
<Label value={totalPrice} ... />
...
</div>
)
}
অন্যদিকে, জিকুয়ের জন্য আপনাকে আপনার ইউআই অবস্থাটি জরুরীভাবে রূপান্তর করতে হবে, যেমন লেবেল উপাদান নির্বাচন করে এবং তাদের পাঠ্য এবং সিএসএস আপডেট করতে হবে:
updatePrice(price) {
$("#price-label").val(price);
$("#price-label").toggleClass('expansive', price > 100);
$("#price-label").toggleClass('cheap', price < 100);
updateTotalPrice();
...
}
updateVolume(volume) {
$("#volume-label").val(volume);
$("#volume-label").toggleClass('high', volume > 1000);
$("#volume-label").toggleClass('low', volume < 1000);
updateTotalPrice();
...
}
updateTotalPrice() {
const totalPrice = price * volume;
$("#total-price-label").val(totalPrice);
...
}
বাস্তব বিশ্বের দৃশ্যে, আরও অনেকগুলি ইউআই উপাদান আপডেট করার দরকার আছে, এর সাথে তাদের বৈশিষ্ট্যগুলি (যেমন, সিএসএস শৈলী এবং ইভেন্ট শ্রোতা) ইত্যাদি you আপনি যদি জিকুয়েরিটি অযৌক্তিকভাবে এটি ব্যবহার করেন তবে এটি জটিল ও ক্লান্তিকর হয়ে উঠবে; ইউআই এর কিছু অংশ আপডেট করা ভুলে যাওয়া সহজ, বা পুরানো ইভেন্ট হ্যান্ডলারগুলি অপসারণ করতে ভুলে যাওয়া (মেমরি ফাঁস হওয়া বা হ্যান্ডলারের একাধিকবার আগুন লাগার কারণ) ইত্যাদি etc. ইত্যাদি এখানেই বাগগুলি ঘটে, অর্থাত্ ইউআই রাজ্য এবং মডেল রাজ্যের বাইরে চলে গেছে সুসংগত.
সিঙ্কের বাইরে থাকা রাষ্ট্রগুলি কখনই রিএ্যাক্টের ঘোষণামূলক পদ্ধতির সাথে ঘটবে না, কারণ আমাদের কেবলমাত্র মডেল রাষ্ট্রটি আপডেট করতে হবে এবং ইউআই এবং মডেল রাজ্যগুলিকে সিঙ্কে রাখার জন্য রিঅ্যাক্ট দায়বদ্ধ।
- হুকের নীচে, প্রতিক্রিয়া অপরিহার্য কোড ব্যবহার করে সমস্ত পরিবর্তিত DOM উপাদান আপডেট করবে।
আপনি আমার উত্তরটি পড়তে পারেন এর জন্য ঘোষিত এবং আবশ্যক প্রোগ্রামিংয়ের মধ্যে পার্থক্য কী? ।
PS: উপরের jQuery উদাহরণ থেকে, আপনি কী ভাবতে পারেন যদি আমরা কোনও updateAll()পদ্ধতিতে সমস্ত ডিওএম ম্যানিপুলেশনগুলি রাখি এবং প্রতিবার যখন আমাদের কোনও মডেল রাষ্ট্র পরিবর্তন হয় এবং ইউআই কখনই সিঙ্কের বাইরে না যায়। আপনি সঠিক, এবং এটি কার্যকরভাবে প্রতিক্রিয়া দেখায় যা হ'ল, কেবল পার্থক্য হ'ল jQuery updateAll()অনেকগুলি অপ্রয়োজনীয় ডিওএম ম্যানিপুলেশন ঘটাবে, তবে প্রতিক্রিয়া কেবল তার ভার্চুয়াল ডোম ডিফিং আলগোরিদম ব্যবহার করে পরিবর্তিত ডোম উপাদানগুলিকে আপডেট করবে ।
Imperative programming: telling the "machine" how to do something, and as a result what you want to happen will happen. Declarative programming: telling the "machine"1 what you would like to happen, and let the computer figure out how to do it.