কেন প্রতিক্রিয়াযুক্ত ডকসগুলি কম্পোনেন্টডিলমাউন্টে এজ্যাক্স করার পরামর্শ দিচ্ছে, কম্পোনেন্টওয়ালমাউন্ট নয়?


102

শিরোনাম এটি সব বলছে। আমি বুঝতে componentDidMountপারি যে ডম অ্যাক্সেসের প্রয়োজন এমন কোনও কিছুর জন্য কেন উপযুক্ত, তবে একটি এজেএক্স অনুরোধ প্রয়োজনীয় বা সাধারণত এটির প্রয়োজন হয় না।

কি দেয়?


@ ফুরকানও আমি মনে করি তিনি বোঝাতে চেয়েছিলেন যে উপাদানটি দ্বারা সরবরাহিত ডোম উপাদানগুলির অ্যাক্সেস। এবং তিনি সম্পূর্ণরূপে সঠিক কারণ যদি আপনি যদি বলেন যে উপাদানগুলি অ্যাক্সেস করার চেষ্টা করছিল componentWillMount... তবে উপাদানটি মাউন্ট হয়নি fail
জেকড্রয়েড

@AlanH। আমার প্রশ্নটি মুছে ফেলা হয়েছে, অবশ্যই আপনার উপাদান উপাদানডমাউন্টে ডম অ্যাক্সেস আছে। এটি একটি নিয়ম, এটি সম্পর্কে ব্যাখ্যা করার কিছুই নেই। ধন্যবাদ।
ফুরকানও

আমার মতে আমরা কেন অজ্যাক্স ফাংশনটিকে কম্পোনেন্টডিডমাউন্টের পরে কল করি তা হ'ল প্রথমে নিশ্চিত করতে হবে যে এলিমেন্টটি শুরুতে সুষ্ঠুভাবে উপস্থাপন করছে। এর পরে আমরা আজাক্স কল করতে পারি। যদি আমরা প্রথমে এজ্যাক্স কল করি এবং কিছু ত্রুটি ঘটায় তা রেন্ডারিংয়ে সমস্যা সৃষ্টি করবে
ফারিস রায়হান

উত্তর:


62

componentDidMountপার্শ্ব প্রতিক্রিয়া জন্য। ইভেন্ট শ্রোতাদের যোগ করা, এজেএক্স, ডিওএমকে পরিবর্তন করা ইত্যাদি

componentWillMountখুব কমই দরকারী; বিশেষত যদি আপনি সার্ভার সাইড রেন্ডারিংয়ের বিষয়ে চিন্তা করেন (ইভেন্ট শ্রোতাদের যুক্ত করা ত্রুটি এবং ফাঁস ঘটায় এবং অন্য অনেকগুলি জিনিস ভুল হতে পারে)।

componentWillMountশ্রেণীর উপাদানগুলি থেকে অপসারণের বিষয়ে আলোচনা রয়েছে কারণ এটি নির্মাণকারীর মতো একই উদ্দেশ্যে কাজ করে। এটি createClassউপাদানগুলিতে থাকবে ।


1
ইভেন্ট শ্রোতাদের যুক্ত করা ত্রুটি সৃষ্টি করে এবং সার্ভারে সর্বদা ফাঁস করে, বা কেবলমাত্র componentWillMount? আমি সত্যিই পার্থক্য দেখতে পাচ্ছি না।
অ্যালান এইচ।

18
@ অ্যালান - আপনি যদি ক্লায়েন্টাইড এবং সার্ভার উভয় ক্ষেত্রেই প্রতিক্রিয়া ব্যবহার করছেন তবে আপনি দেখতে পাবেন যে অভ্যন্তরের যে কোনও কিছুই componentWillMountসার্ভারসাইড রেন্ডারে কার্যকর করা হবে। Wheras আপনি যদি ব্যবহার করেন componentDidMountতবে তা কেবল ক্লায়েন্টাইডে কার্যকর করা হবে। ফলস্বরূপ যে জিনিসগুলিতে componentWillMountবাহ্যিক মিথস্ক্রিয়া সম্পাদন করা হয় বা ইভেন্টগুলি ইত্যাদির সাথে আবদ্ধ করা কোনও দুর্দান্ত ধারণা নয়। আপনার যদি সার্ভারসাইডে আপনার উপাদানগুলি রেন্ডার করার কোনও পরিকল্পনা না থাকে তবে কেবল সম্ভাব্য কোড বহনযোগ্যতার জন্য এটি এখনও ভাল ধারণা নয়। এটি খুব খারাপ মূল কারণের বাইরে যা ডানিউলের জবাবে ব্যাখ্যা করা হয়েছে।
মাইক ড্রাইভার

3
কম্পোনেন্টউইলমাউন্ট সার্ভারে চালিত হয়, তবে উপাদানWillUnmount (যেখানে আপনি শ্রোতাদের সরান) তা নয়। এটি আপনাকে শ্রোতা যুক্ত করতে এবং এগুলি কখনই পরিষ্কার করতে পারে না।
ব্রিগেন্ড

প্রতিক্রিয়া মূল দলের লোকেরা ভবিষ্যতের সংস্করণগুলি থেকে কম্পোনেন্টউইলমাউন্টটি সরানোর বিষয়ে বিবেচনা করছে।
চেম্বারলাইন

1
@ অঙ্কিতসিংহনিয়া এটি সার্ভারের রেন্ডারিং এবং অগভীর ইউনিট পরীক্ষাগুলি ভাঙ্গবে।
ব্রিগেন্ড

36

শুরুতেও আমার একই সমস্যা ছিল। আমি অনুরোধ করার চেষ্টা করার সিদ্ধান্ত নিয়েছি componentWillMountতবে এটি বিভিন্ন ছোট সমস্যা থেকে শেষ হয়।

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


ঠিক আছে, ধন্যবাদ. ভেবেছিল এটি এমন কিছু হতে পারে তবে আপনি ঠিক বলেছেন, অবাক করার মতো বিষয় যে রেন্ডারটি করার আগে এজাক্স অনুরোধটি শেষ হতে পারে।
অ্যালান এইচ।

1
@ ডানিউলা আপনি কি নিশ্চিত? AJAX অনুরোধ রেন্ডার করার আগে কীভাবে শেষ করতে পারে?
লিওন গ্র্যাপেনথিন

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

1
@ সুচেংকোহ ইএস 6 শ্রেণি নির্মাতার সমতুল্য componentWillMount, তাই আপনার এখনও componentDidMountআপনার এজ্যাক্স কলগুলি ব্যবহার করা উচিত ।
দানিউল

1
@ সুচেংকোহ - নির্ধারকটিতে অবশ্যই এমন কিছু করা উচিত নয় যা সেটাকে অবশ্যই সেট করতে হবে, যা ক্লায়েন্ট এবং সার্ভারে বর্ণের পরিস্থিতি তৈরি করবে। আপনাকে কখনই setStateকোনও উপাদান তৈরির জন্য কল করা উচিত নয় এবং এজেএক্স কল কখন শেষ হবে তা নির্ধারণ করার কোনও উপায় আপনার নেই। twitter.com/dan_abramov/status/576453138598723585
চেম্বারলাইন

3

ডকুমেন্টেশন অনুসারে রাষ্ট্রটি সেট করে componentWillMountকোনও পুনরায় রেন্ডারিং শুরু করবে না। যদি এজেএক্স কলটি অবরুদ্ধ না হয়ে থাকে এবং আপনি Promiseসাফল্যের সাথে উপাদানটির অবস্থা আপডেট করে এমন একটি প্রত্যাবর্তন করেন তবে উপাদানটি রেন্ডার হওয়ার পরে প্রতিক্রিয়া উপস্থিত হওয়ার সম্ভাবনা রয়েছে। হিসাবে componentWillMountএকটি ট্রিগার নেই পুনরায় রেন্ডার আপনি আচরণ আপনার প্রত্যাশিত যা উপাদান হচ্ছে অনুরোধ করা তথ্য সঙ্গে অনুষ্ঠিত হয় থাকবে না।

আপনি যদি কোনও ফ্লাক্স লাইব্রেরি ব্যবহার করেন এবং স্টোরটিতে অনুরোধ করা ডেটা উপাদানটির সাথে সংযুক্ত থাকে (বা কোনও সংযুক্ত উপাদান থেকে উত্তরাধিকারী হন) এটি কোনও সমস্যা হবেনা কারণ এই ডেটার অভ্যর্থনা সম্ভবত সম্ভবত প্রপস পরিবর্তন করবে will অবশেষে.


1
componentWillMountপ্রথম রেন্ডারের আগে একটি নতুন রাজ্য সংজ্ঞায়িত করা হওয়ায় পুনরায় রেন্ডারটি ট্রিগার করে না। তবে যদি setStateএজেএক্স কলব্যাকে ডাকা হয় তবে প্রথম রেন্ডারের পরে এটি অবশ্যই স্পষ্টভাবে ডাকা হবে এবং এটি পুনরায় রেন্ডারকে ট্রিগার করবে।
ওয়েবডিফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.