आपको अंतर दिखाने के लिए रिएक्ट (घोषणात्मक) और JQuery (अनिवार्य) की तुलना करना सबसे अच्छा है।
प्रतिक्रिया में, आपको केवल अपने UI की अंतिम स्थिति का वर्णन करने की आवश्यकता है render()
, बिना इस बात की परवाह किए कि पिछले UI राज्य से नए UI राज्य में संक्रमण कैसे किया जाए। उदाहरण के लिए,
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>
)
}
दूसरी ओर, JQuery को अपने UI स्थिति को अनिवार्य रूप से बदलने की आवश्यकता होती है, उदाहरण के लिए, लेबल तत्वों का चयन करना और उनके पाठ और CSS को अपडेट करना:
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);
...
}
वास्तविक दुनिया के परिदृश्य में, अपडेट किए जाने वाले कई और UI तत्व होंगे, साथ ही उनकी विशेषताएँ (जैसे, CSS शैलियाँ और ईवेंट श्रोता), आदि। यदि आप इसे अनिवार्य रूप से JQuery का उपयोग करते हैं, तो यह जटिल और थकाऊ हो जाएगा; UI के कुछ हिस्सों को अपडेट करना, या पुराने ईवेंट हैंडलर (कारण मेमोरी लीक या हैंडलर से कई बार आग लगना) को भूल जाना आसान है, आदि। यह वह जगह है जहां बग्स होते हैं, यानी, यूआई राज्य और मॉडल राज्य से बाहर हैं सिंक।
सिंक से बाहर के राज्य रिएक्ट के घोषणात्मक दृष्टिकोण के लिए कभी नहीं होंगे, क्योंकि हमें केवल मॉडल स्थिति को अपडेट करने की आवश्यकता है, और रिएक्ट UI और मॉडल राज्यों को सिंक में रखने के लिए जिम्मेदार है।
- हुक के तहत, रिएक्ट सभी परिवर्तित डोम तत्वों को अनिवार्य कोड का उपयोग करके अपडेट करेगा।
घोषणात्मक और अनिवार्य प्रोग्रामिंग के बीच अंतर क्या है, इसके लिए आप मेरा जवाब भी पढ़ सकते हैं ।।
पुनश्च: ऊपर jQuery के उदाहरण से, आप सोच सकते हैं कि क्या होगा यदि हम सभी DOM जोड़तोड़ को एक updateAll()
विधि में रखते हैं, और इसे हर बार कॉल करते हैं जब हमारा कोई मॉडल राज्य बदलता है, और UI कभी भी सिंक से बाहर नहीं होगा। आप सही हैं, और यह प्रभावी रूप से रिएक्ट क्या करता है, एकमात्र अंतर यह है कि jQuery updateAll()
कई अनावश्यक DOM जोड़तोड़ का कारण बनेगा, लेकिन React अपने वर्चुअल DOM डिफिंग अल्गोरिथम का उपयोग करके केवल DOM तत्वों को बदलेगा ।
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.