क्या कोई भी रिएक्ट्स वन-वे डेटा बाइंडिंग और एंगुलर के टू-वे डेटा बाइंडिंग के बीच अंतर समझा सकता है


109

मैं इन अवधारणाओं पर थोड़ा फजी हूं, अगर मैं एक ही ToDo ऐप को पूरी तरह से AngularJS और ReactJS में बनाता हूं --- तो क्या बनाता है React ToDo का इस्तेमाल एक तरह से डेटा बाइंडिंग बनाम AngularJS के टू-वे डेटा बाइंडिंग के लिए होता है?

मैं समझता हूं कि रिएक्ट की तरह काम करता है

रेंडर (डेटा) ---> यूआई।

यह कोणीय से कैसे अलग है?

जवाबों:


165

कोणीय

जब कोणीय दो डेटाबाइंडिंग सेट करता है तो दो "वॉचर्स" मौजूद होते हैं (यह एक सरलीकरण है)

//js
$scope.name = 'test';
$timeout(function()  { $scope.name = 'another' }, 1000);
$timeout(function()  { console.log($scope.name); }, 5000);

<!-- html --->
<input ng-model="name" />

इनपुट के साथ शुरू होगा test, फिर another1000ms में अपडेट होगा । $scope.nameनियंत्रक कोड से या इनपुट को बदलकर कोई भी परिवर्तन , कंसोल लॉग में 4000ms बाद में परिलक्षित होगा। परिवर्तन स्वचालित रूप <input />से $scope.nameसंपत्ति में परिलक्षित होते हैं, क्योंकि ng-modelसेट इनपुट देखता है और $scopeपरिवर्तनों को सूचित करता है। कोड से परिवर्तन और HTML से परिवर्तन दो तरह से बाध्यकारी हैं । ( इस फिडेल को देखें )

प्रतिक्रिया

प्रतिक्रिया में HTML को घटक बदलने की अनुमति देने के लिए कोई तंत्र नहीं है। HTML केवल उन घटनाओं को बढ़ा सकता है जो घटक प्रतिक्रिया करता है। विशिष्ट उदाहरण का उपयोग करके है onChange

//js
render() { 
    return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
    this.setState({value: e.target.value});
}

का मान पूरी तरह से फ़ंक्शन द्वारा <input />नियंत्रित किया जाता है। इस मान को अपडेट करने का एकमात्र तरीका घटक से ही है, जो एक घटना को संलग्न करके किया जाता है जो प्रतिक्रिया घटक विधि के साथ सेट होता है । घटकों राज्य के लिए सीधी पहुँच नहीं है, और इसलिए यह परिवर्तन नहीं कर सकते। यह वन-वे बाइंडिंग है । (इस कोडपेन को देखें )renderonChange<input />this.state.valuesetState<input />


9
धन्यवाद, यह अत्यंत जानकारीपूर्ण था। इसलिए मुझे लगता है कि एंगुलर काम करता है जैसे UI <----> रिएक्ट के रेंडर (डेटा) के विपरीत डेटा ---> यूआई?
विनचेनजो मैनिग्निस्पो

हां, इसे डालने का एक बहुत ही संक्षिप्त तरीका है
Kyeotic

5
स्पष्ट होने के लिए, डेटा बाइंडिंग के बारे में विशिष्ट बात यह है कि यह आपके लिए अपडेट स्वचालित रूप से करता है । प्रतिक्रिया उदाहरण में, UI → डेटा अभी भी हो रहा है, यह सिर्फ इतना है कि यह डिफ़ॉल्ट रूप से नहीं होता है - आपको मैन्युअल रूप से onChangeश्रोता को सेट करना होगा और चलाना होगा handleChange। लेकिन क्योंकि प्रतिक्रिया का एक ही रास्ता है डेटा के वहाँ से, बंधन, डेटा → यूआई अद्यतन करता है अपने आप ही हो।
एडम ज़र्नर

FYI करें फिडल को AngularJS 1.1.1 के संदर्भ की आवश्यकता थी, मुझे लगता है कि AngularJS 1.0.1 को रेफरी अब मान्य नहीं था, 404 मिल रहा था। अजीब तरह से एक नए कोड में समान कोड का उपयोग कर (1.1.1 संदर्भ के साथ) विफल रहता है , पता नहीं कि यह किस बारे में है।
जोश सटरफील्ड

194

मैंने थोड़ी ड्राइंग बनाई। मुझे उम्मीद है कि यह काफी स्पष्ट है। मुझे पता है अगर यह नहीं है!

2 तरीके डेटा बाइंडिंग वी.एस. 1 रास्ता डेटा बाइंडिंग


21
क्या 'टिट्रे डी ल'नोनसे' है?
ghd

6
'विज्ञापन शीर्षक' फ्रेंच में
टाइमफ्लिश

14
@DamienRoche जहां तक ​​मैं समझता हूं कि यह अवधारणा अगले अंतर है: दो तरह से डेटा बाइंडिंग: बदलते डेटा परिवर्तन दृश्य और इसके विपरीत - व्यू अपडेट डेटा के अंदर इनपुट अपडेट करना। रास्ते में डेटा का प्रवाह: डेटा अपडेट देखने का अद्यतन करना लेकिन दृश्य में इनपुट अपडेट करना तब तक डेटा अपडेट नहीं करेगा जब तक कि प्रोग्रामर इनपुट के लिए श्रोता को संलग्न करके स्पष्ट रूप से ऐसा नहीं करता है जो डेटा को अपडेट करेगा। आशा है कि यह आपके लिए थोड़ा और स्पष्ट कर देगा।
केक_सलर

2
धन्यवाद, @Patrick आपके संदेश के लिए। मुझे हमेशा यह महसूस करने में बहुत खुशी होती है कि मैंने जो कुछ किया वह दूसरों के लिए उपयोगी है
गेब्रियल

लिंक टूटा है @ गैब्रिएल क्या आप पोस्ट में छवि साझा कर सकते हैं?
user3141326

12

दो-तरफ़ा डेटा बाइंडिंग किसी गुण का मान लेने और उसे दृश्य पर प्रदर्शित करने की क्षमता प्रदान करता है, जबकि मॉडल में मूल्य को स्वचालित रूप से अपडेट करने के लिए एक इनपुट भी होता है। उदाहरण के लिए, आप संपत्ति "कार्य" को दृश्य पर दिखा सकते हैं और उसी संपत्ति पर टेक्स्टबॉक्स मान को बांध सकते हैं। इसलिए, यदि उपयोगकर्ता टेक्स्टबॉक्स के मूल्य को अपडेट करता है, तो दृश्य स्वचालित रूप से अपडेट हो जाएगा और नियंत्रक में इस पैरामीटर का मूल्य भी अपडेट किया जाएगा। इसके विपरीत, एक तरह से बाइंडिंग केवल मॉडल के मूल्य को देखने के लिए बाध्य करता है और यह निर्धारित करने के लिए एक अतिरिक्त वॉचर नहीं है कि क्या उपयोगकर्ता द्वारा दृश्य में मूल्य बदल दिया गया है।

React.js के संबंध में, यह वास्तव में दो तरह से डेटा बाइंडिंग के लिए डिज़ाइन नहीं किया गया था, हालांकि, आप अभी भी कुछ अतिरिक्त तर्क जोड़कर दो-तरफ़ा बाइंडिंग को लागू कर सकते हैं, उदाहरण के लिए इस लिंक को देखें । Angular.JS में टू-वे बाइंडिंग प्रथम श्रेणी का नागरिक है, इसलिए इस अतिरिक्त तर्क को जोड़ने की कोई आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.