কেউ কি প্রতিক্রিয়াগুলিকে একমুখী ডেটা বাঁধাই এবং অ্যাঙ্গুলারের দ্বিমুখী ডেটা বাঁধাইয়ের মধ্যে পার্থক্যটি ব্যাখ্যা করতে পারে


109

আমি এই ধারণাগুলি সম্পর্কে কিছুটা অস্পষ্ট, আমি যদি একইভাবে টুডো অ্যাপ্লিকেশনটি সম্পূর্ণভাবে AngularJS এবং ReactJS এ তৈরি করি --- তবে কী প্রতিক্রিয়া টুডো 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, তারপরে another1000 মিমিতে আপডেট হবে । কোন পরিবর্তন $scope.nameহয় নিয়ামক কোড থেকে বা ইনপুট পরিবর্তন করে, কনসোল লগ 4000ms পরে দেখা যাবে। এর পরিবর্তনগুলি সম্পত্তিতে স্বয়ংক্রিয়ভাবে <input />প্রতিফলিত $scope.nameহয়, যেহেতু ng-modelসেট আপগুলি ইনপুট দেখায় $scopeএবং পরিবর্তনের বিষয়ে অবহিত করে। কোড থেকে পরিবর্তন এবং এইচটিএমএল থেকে আসা পরিবর্তনগুলি দ্বি-মুখী বন্ধন । ( এই ঝাঁকুনিটি দেখুন )

প্রতিক্রিয়া

প্রতিক্রিয়াটির উপাদানটিকে পরিবর্তন করার জন্য এইচটিএমএলকে অনুমতি দেওয়ার কোনও ব্যবস্থা নেই। এইচটিএমএল কেবল সেই ইভেন্টগুলিকে উত্থাপন করতে পারে যা উপাদানগুলি সাড়া দেয়। সাধারণ উদাহরণ ব্যবহার করে হয় onChange

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

এর মানটি ফাংশন দ্বারা পুরোপুরি<input /> নিয়ন্ত্রিত হয়render । এই মানটি আপডেট করার একমাত্র উপায় হ'ল উপাদানটি থেকেই, যা কোনও onChangeইভেন্ট সংযুক্ত করে সম্পন্ন হয় <input />যা this.state.valueপ্রতিক্রিয়া উপাদানটির পদ্ধতিতে সেট করে setState<input />উপাদান রাষ্ট্র থেকে সরাসরি প্রবেশাধিকার নেই, এবং তাই এটি পরিবর্তন করতে পারবেন না। এটি একমুখী বাঁধাই । (এই কোডেপেনটি দেখুন )


9
ধন্যবাদ, এটি অত্যন্ত তথ্যপূর্ণ ছিল tive সুতরাং আমি অনুমান করি যে কৌনিকটি আরও বেশি ইউআইয়ের মতো কাজ করে <----> রিঅ্যাক্টের রেন্ডার (ডেটা) এর বিপরীতে ডেটা ---> ইউআই?
উইনচেঞ্জোম্যাগনিফিকো

হ্যাঁ, এটি
লাগানোর

5
স্পষ্টতই, ডেটা বাঁধাই সম্পর্কে স্বতন্ত্র জিনিসটি এটি আপনার জন্য স্বয়ংক্রিয়ভাবে আপডেটগুলি করে । প্রতিক্রিয়া উদাহরণে, ইউআই → ডেটা এখনও ঘটছে, এটি কেবলমাত্র ডিফল্টরূপে ঘটে না - আপনাকেonChange শ্রোতাদের ম্যানুয়ালি সেট আপ করতে হবে এবং চালনা করতে হবে handleChange। কিন্তু কারণ প্রতিক্রিয়া এক পথ ডেটার সেখান থেকে বাঁধাই, ডাটা → UI 'তে আপডেট করে স্বয়ংক্রিয়ভাবে।
অ্যাডাম জারনার

এফওয়াইআই ফিডলটি অ্যাঙ্গুলারজেএস ১.১.১-এর একটি রেফারেন্সের দরকার ছিল, আমি অনুমান করি যে কৌণিক জেএস ১.০.১-এর রেফটি আর কার্যকর ছিল না, ৪০৪ পাচ্ছিল d অদ্ভুতভাবে একটি ব্র্যান্ড নিউ ফিডলে অভিন্ন কোড ব্যবহার করা (একটি ১.১.১ রেফারেন্স সহ) ব্যর্থ হয়েছে জানো না, এটি কী সম্পর্কে।
জোশ সটারফিল্ড

194

আমি একটু অঙ্কন করলাম। আমি এটি যথেষ্ট পরিষ্কার আশা করি। যদি তা না হয় আমাকে জানাবেন!

2 উপায় ডেটা বাইন্ডিং ভিএস 1 উপায় ডেটা বাঁধাই


21
'টাইট্র ডি ল'অনোনস' কী?
gd

6
ফরাসি ভাষায় 'বিজ্ঞাপন শিরোনাম'
সময়ফেলা 123

14
@ ড্যামিয়েনরোচে যতক্ষণ আমি এই ধারণাটি বুঝতে পারি ততই পার্থক্য: দ্বি-উপায়ে ডেটা বাইন্ডিং: ডেটা পরিবর্তন করে দেখুন এবং তার বিপরীতে - ভিউ আপডেটের ডেটার ভিতরে ইনপুট আপডেট করা। পথে চলমান ডেটা প্রবাহ: ডেটা আপডেট ভিউ আপডেট করা কিন্তু ভিউতে ইনপুট আপডেট করা তথ্য আপডেট করবে না যদি না প্রোগ্রামার শ্রোতাদের ইনপুটটিতে সংযুক্ত করে স্পষ্ট করে না করে যা ডেটা আপডেট করবে। আশা করি এটি আপনার জন্য কিছুটা স্পষ্ট করে তুলবে।
কেক_সেলার

2
ধন্যবাদ, আপনার বার্তার জন্য পেট্রিক আমি যা কিছু করেছি তা অন্যদের পক্ষে উপকারী বলে আমি সর্বদা খুব খুশি
গ্যাব্রিয়েল

লিঙ্কটি নষ্ট হয়েছে @ গ্যাব্রিয়েল আপনি কি পোস্টটিতে ছবিটি ভাগ করে নিতে পারবেন?
ব্যবহারকারী3141326

12

দ্বি-মুখী ডেটা বাইন্ডিং মডেলের মান স্বয়ংক্রিয়ভাবে আপডেট করার জন্য একটি ইনপুট থাকার সময় কোনও সম্পত্তির মূল্য নিতে এবং দৃশ্যে এটি প্রদর্শন করার ক্ষমতা সরবরাহ করে। উদাহরণস্বরূপ, আপনি ভিউতে সম্পত্তি "টাস্ক" প্রদর্শন করতে পারেন এবং একই সম্পত্তিটিতে পাঠ্যবাক্সের মানটি বাঁধতে পারেন। সুতরাং, ব্যবহারকারী যদি পাঠ্যবক্সের মান আপডেট করে তবে ভিউ স্বয়ংক্রিয়ভাবে আপডেট হবে এবং নিয়ামকটিতে এই পরামিতির মানও আপডেট করা হবে। বিপরীতে, একটি উপায় বাঁধাই কেবলমাত্র মডেলের মানটিকে দৃশ্যের সাথে বেঁধে রাখে এবং ব্যবহারকারীর দ্বারা দর্শনের মান পরিবর্তন করা হয়েছে কিনা তা নির্ধারণ করার জন্য অতিরিক্ত পর্যবেক্ষক নেই।

রিঅ্যাক্ট.জেএস সম্পর্কিত, এটি আসলে দ্বি-উপাত্তের জন্য বাইন্ডিং বাঁধার জন্য ডিজাইন করা হয়নি, তবে আপনি কিছু অতিরিক্ত যুক্তি যুক্ত করে নিজেই দ্বি-মুখী বাইন্ডিং প্রয়োগ করতে পারেন, উদাহরণস্বরূপ এটি দেখুন লিঙ্কটি দেখুন । অ্যাঙ্গুলার.জেএস-এ দ্বিমুখী বাইন্ডিং প্রথম শ্রেণির নাগরিক, সুতরাং এই অতিরিক্ত যুক্তি যুক্ত করার দরকার নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.