রিঅ্যাক্টজেএসে কম্পোনেন্টওয়েলমাউন্ট এবং কম্পোনেন্টডিডমান্টের মধ্যে পার্থক্য কী?


91

আমি ফেসবুকের ডকুমেন্টেশনগুলিতে ( রিঅ্যাক্ট.কম্পোনেন্ট ) তাকিয়েছিলাম এবং এতে componentWillMountক্লায়েন্ট / সার্ভারে কীভাবে আবেদন করা হয় তা কেবল ক্লায়েন্টের কাছেই আহ্বান করা হয়েছে তা উল্লেখ componentDidMountকরে। componentWillMountসার্ভারে কি করে ?

উত্তর:


70

কম্পোনেন্টউইলমাউন্ট মূলত নির্মাতা। আপনি উদাহরণস্বরূপ বৈশিষ্ট্যগুলি সেট করতে পারেন যা রেন্ডারকে প্রভাবিত করে না, স্টোর থেকে সিঙ্ক্রোনালি ডেটা টানতে পারে এবং সেটস্টেট দিয়ে সেট করুন এবং আপনার উপাদানটি সেট আপ করার সময় আপনাকে চালাতে হবে এমন অন্যান্য সাধারণ পার্শ্ব প্রতিক্রিয়া মুক্ত কোড।

এটি খুব কমই প্রয়োজন, এবং ES6 ক্লাসে মোটেই নয়।


এটি নির্মাণকারীর মতো নয়। দেব কঠোর মোডে, যেমন, আপনার কন্সট্রাকটর দুইবার (দুটি ভিন্ন দৃষ্টান্ত জন্য) বলা হবে কিন্তু শুধুমাত্র একটি componentWillMount নামক থাকবে - stackoverflow.com/questions/61254372/...
আদর্শ

63

constructorপদ্ধতি নয় হিসাবে একই componentWillMount

রেডাক্সের লেখকের মতে, কনস্ট্রাক্টরের কাছ থেকে ক্রিয়া প্রেরণ করা ঝুঁকিপূর্ণ কারণ এটি রেন্ডারিংয়ের সময় রাজ্যটিকে পরিবর্তিত করতে পারে।

তবে প্রেরণ componentWillMountকরা ঠিক আছে is

গিথুব ইস্যু থেকে :

এটি ঘটে যখন কোনও উপাদানগুলির কনস্ট্রাক্টরের অভ্যন্তরে প্রেরণ () অন্য উপাদানগুলির ভিতরে সেটস্টেট () তৈরি করে। প্রতিক্রিয়া যেমন সতর্কতাগুলির জন্য "বর্তমান মালিক" এর উপর নজর রাখে — এবং এটি মনে করে যে আমরা যখন কনস্ট্রাক্টরের ভিতরে সেটস্টেট () ব্যবহার করি যখন প্রযুক্তিগতভাবে অ্যাপ্লিকেশনটির অন্য কোনও অংশে কনস্ট্রাক্টর সেটস্টেট () তৈরি করে। আমি মনে করি না যে আমাদের এটি পরিচালনা করা উচিত - এটি ঠিক কাজটি করার জন্য এটি চেষ্টা করার জন্য কেবল প্রতিক্রিয়া। সমাধানটি হ'ল আপনি যেমনটি সঠিকভাবে উল্লেখ করেছেন, পরিবর্তে কম্পোনেন্টউলমাউন্ট () এর ভিতরে () প্রেরণ করা।


সব পরিস্থিতিতে এটি অবশ্যই জরিমানা নয়, যা চলছে তার উপর নির্ভর করে componentXxxMountউদাহরণস্বরূপ, অ্যাজাক্স willMountসমস্যার কারণ হতে পারে।
ডেভ নিউটন

4
@ ডেভিনিউটন আমি সব পরিস্থিতিতে এটির জরিমানা বলিনি। আমি কেবল একটি উদাহরণ দিয়েছি যেখানে উত্তরটি প্রমাণ করতে পার্থক্য রয়েছে যে "উপাদানটি উইলমাউন্ট মূলত নির্মাতা" এটি ভুল। এটি পরিষ্কার করার জন্য ধন্যবাদ
লিরান ব্রিমার

@ লিরানব্রিমার এই উত্তরটি ভুল হয়ে উঠছে কারণ উপাদানবিলমাউন্টটি অবচিত হয়ে গেছে এবং যথাক্রমে 0.16 এবং 0.17-এ কাজ করা বন্ধ করবে, বিশেষত "তবে, উপাদানওয়ালমাউন্ট থেকে প্রেরণ করা ঠিক আছে" " বিবৃতি
ব্রায়ান ওয়েবস্টার

37

ফেকরাইনব্রিগ্যান্ড যা বলেছিল তা যুক্ত করতে componentWillMount, সার্ভারে এবং ক্লায়েন্টে প্রতিক্রিয়া জানানোর সময় কল হয়, তবে componentDidMountকেবল ক্লায়েন্টকে ডাকা হয়।


10
componentWillMountসার্ভার এবং ক্লায়েন্ট কল করা হবে। দেখুন: ফেসবুক.
ডেভিড

4
@ ডেভ নিউটন কেমন আছেন? এটি componentWillMountক্লায়েন্টের সাথে যোগাযোগ করা হবে না বলে জানিয়েছিল
আয়ুশ

7
@ আয়ুষশঙ্কার আইএমও-বিভ্রান্তিকর তথ্য সরবরাহ করা জরুরী। স্পষ্ট না হয়ে, ভুল ব্যাখ্যা করার জন্য জায়গা রয়েছে: ডকস স্পষ্ট। আপনি সঠিক যে এটি সুস্পষ্টভাবে বিপরীতেও নয়।
ডেভ নিউটন

31

componentWillMountrenderকোনও উপাদান সূচনার আগে করা হয় এবং প্রপসগুলি মূল্যায়ন করতে এবং তাদের উপর ভিত্তি করে কোনও অতিরিক্ত যুক্তি (সাধারণত রাষ্ট্রের আপডেটও করা হয়) করতে ব্যবহৃত হয় এবং যেমন সার্ভারে প্রথম সার্ভারের রেন্ডারড মার্কআপ পাওয়ার জন্য করা যেতে পারে ।

componentDidMountrenderDOM আপডেট হওয়ার পরে প্রাথমিকের পরে সঞ্চালিত হয় (তবে গুরুত্বপূর্ণভাবে এই ডোম আপডেটের আগে ব্রাউজারে আঁকা হয়, আপনাকে ডিওএমের সাথেই সমস্ত ধরণের উন্নত ইন্টারঅ্যাকশন করার অনুমতি দেয়)। এটি অবশ্যই ব্রাউজারেই ঘটতে পারে এবং এসএসআরের অংশ হিসাবে ঘটে না কারণ সার্ভার কেবল মার্কআপ তৈরি করতে পারে এবং ডম নিজেই নয়, এসএসআর ব্যবহার করে ব্রাউজারে পাঠানোর পরে এটি করা হয় SS

আপনি যে ডোমটি বলছেন তার সাথে উন্নত মিথস্ক্রিয়া? Whaaaat ?? ... হাঁ - এই সময়ে কারণ করে DOM আপডেট করা হয়েছে (কিন্তু ব্যবহারকারী এখনও ব্রাউজারে আপডেট হতে দেখেনি) এটি ব্যবহার করে পর্দায় পথিমধ্যে প্রকৃত পেইন্টিং করা সম্ভব window.requestAnimationFrameএবং তারপর পরিমাপ প্রকৃত মত কাজগুলি DOM উপাদান যা আউটপুট হবে, আপনি আরও স্থিতিশীল পরিবর্তন সম্পাদন করতে পারবেন, উদাহরণস্বরূপ অজানা ভেরিয়েবল দৈর্ঘ্যের বিষয়বস্তু রয়েছে এমন একটি উপাদানের উচ্চতায় অ্যানিমেট করা (যেমন আপনি এখন সামগ্রীগুলি পরিমাপ করতে পারেন এবং অ্যানিমেশনটিতে একটি উচ্চতা নির্ধারণ করতে পারেন), বা কিছু রাষ্ট্র পরিবর্তনের সময় সামগ্রীর দৃশ্যের ঝলক এড়াতে।

রাষ্ট্রের পরিবর্তনগুলি componentDid...যেহেতু অন্যথায় রক্ষা করা সীমাহীন লুপের কারণ হতে পারে তবে খুব সাবধান থাকুন কারণ একটি রাষ্ট্র পরিবর্তনও পুনরায় রেন্ডার ঘটায় এবং এর ফলে অন্যটি চলতে থাকে componentDid...এবং চালিয়ে যায়


4
আমি যোগ মনে করি না setStatecomponentDidMountএকটি অসীম লুপ কারণ হবে।
ম্যাডি

" অন্যথায় অসীম লুপ সৃষ্টি করতে পারে কারণ একটি রাষ্ট্র পরিবর্তনও পুনরায় রেন্ডার করতে পারে এবং তাই অন্য একটি উপাদানডিডমাউন্ট। এবং চালিয়ে যায় এবং " এটি মোটেও সত্য নয়। রাষ্ট্রীয় পরিবর্তনগুলি পুনরায় রেন্ডার সৃষ্টি করবে তবে এটি componentDidMountবারবার প্রার্থনা করবে না । কম্পোনেন্টডিডমাউন্টটি কেবল একবার কল করা হয় যখন উপাদানটি মাউন্ট হয়।
hussain.codes


2

উপাদানউইলমাউন্ট https://daveceddia.com/where-fetch-data-comp घटक willmount- vs- compenderdidmount/

যদিও একটি "গোটচা" রয়েছে: ডেটা আনার জন্য একটি অ্যাসিঙ্ক্রোনাস কল রেন্ডার হওয়ার আগে ফিরে আসবে না। এর অর্থ উপাদানটি অন্তত একবার খালি ডেটা দিয়ে রেন্ডার করবে।

ডেটা আসার জন্য অপেক্ষা করার জন্য "বিরতি" দেওয়ার কোনও উপায় নেই way আপনি উপাদান-উইলমઉન્ટ থেকে কোনও প্রতিশ্রুতি ফেরত দিতে পারবেন না বা কোনওভাবে কোনও সেট টাইমআউটে রেংগল করতে পারবেন না।

https://de વિકાસmentarc.gitbooks.io/react-indepth/content/Live_crc/birth/premounting_with_componentwillmount.html

আমাদের উপাদানগুলির নেটিভ ইউআই (ডিওএম, ইত্যাদি) তে অ্যাক্সেস থাকবে না। বাচ্চাদের রেফগুলিতেও আমাদের অ্যাক্সেস থাকবে না, কারণ তারা এখনও তৈরি হয়নি। উপাদানটি উইলমাউন্ট () হ'ল আমাদের পক্ষে কনফিগারেশন পরিচালনা করতে, আমাদের রাষ্ট্র আপডেট করতে এবং সাধারণভাবে প্রথম রেন্ডারের জন্য প্রস্তুত করার একটি সুযোগ। এর অর্থ আমরা প্রোপ মানগুলির উপর ভিত্তি করে গণনা বা প্রক্রিয়াগুলি শুরু করতে পারি।


1

উইলমাউন্ট () উপাদানটির জন্য ব্যবহারের কেস

উদাহরণস্বরূপ, আপনি যদি উপাদানটি কখন আপনার উপাদান অবস্থায় তৈরি হয়েছিল তার তারিখটি রাখতে চান, আপনি এই পদ্ধতিতে এটি সেট আপ করতে পারেন। দয়া করে মনে রাখবেন যে এই পদ্ধতিতে স্থিতি স্থিতি ডিওএমকে পুনরায় রেন্ডার করবে না। এটি মাথায় রাখা গুরুত্বপূর্ণ, কারণ বেশিরভাগ ক্ষেত্রেই আমরা যখনই উপাদানটির অবস্থা পরিবর্তন করি তখন পুনরায় রেন্ডারটি ট্রিগার হয়।

componentWillMount() {
  this.setState({ todayDate: new Date(Date.now())});
}

উপাদান-ডিডমাউন্ট () এর জন্য ব্যবহার-কেস

উদাহরণস্বরূপ, আপনি যদি কোনও নিউজ অ্যাপ তৈরি করে যা বর্তমান সংবাদে ডেটা এনে এবং এটি ব্যবহারকারীর কাছে প্রদর্শন করে এবং আপনি ব্যবহারকারীকে পৃষ্ঠাটি রিফ্রেশ না করে প্রতি ঘন্টা এই ডেটা আপডেট করাতে চাইতে পারেন।

componentDidMount() {
  this.interval = setInterval(this.fetchNews, 3600000);
}

0

ComponentDidMount()পদ্ধতিটি কেবল শ্রেণীর উপাদানগুলিতে বর্তমান পৃষ্ঠা পরিবর্তন করে তবে ComponentWillMount()প্রভাবিত হওয়া সমস্ত পৃষ্ঠা পরিবর্তন করেsetStates()

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