ব্যবহারমেমো বা ইউজক্যালব্যাক ভিএস ইউজারের সাথে খালি নির্ভরতা


9

এই গিটহাব ইস্যুতে আমি মূলত পরিবর্তনের প্রস্তাব করেছি:

x = useCallback( ... , []);

প্রতি:

x = useRef( ... ).current;

দুটি একই তবে useRefপ্রতিক্রিয়াটির সাথে নির্ভরতাগুলির তুলনা হয় না।

যার জন্য একটি প্রশ্নের সাথে একটি উত্তর এসেছিল:

এমন পরিস্থিতি কি কখনও আছে যেখানে নির্ভরতা-কম ব্যবহারের জন্য মেমো বা ইউজক্যালব্যাক ব্যবহারের চেয়ে ভাল পছন্দ হবে?

আমি একটি সম্পর্কে ভাবতে পারি না, তবে আমি কিছু ব্যবহারের ক্ষেত্রে উপেক্ষা করেছি।

তাহলে কেউ কি এমন পরিস্থিতি ভাবতে পারেন?

উত্তর:


5

প্রতি প্রতিক্রিয়া হুকস API ডকুমেন্টেশন:

মনে রাখবেন যে ব্যবহারের রেফ এর সামগ্রী পরিবর্তিত হলে আপনাকে অবহিত করে না। । বর্তমান সম্পত্তিটি রূপান্তরিত করে পুনরায় রেন্ডার হতে পারে না ... কলব্যাক রেফ ব্যবহার করে নিশ্চিত করা হয় যে কোনও শিশু উপাদান পরে মাপা নোডটি প্রদর্শন করে (যেমন একটি ক্লিকের প্রতিক্রিয়া হিসাবে), তবুও আমরা প্যারেন্টে এটি সম্পর্কে অবহিত হই উপাদান এবং পরিমাপ আপডেট করতে পারেন।

আপনি এখানে এবং এখানে এটি সম্পর্কে আরও পড়তে পারেন ।


আমি এই প্রশ্নের উত্তর অনুমান করি, তবে আমার সন্দেহ হয় এটি ভুল ছিল। স্যান্ডবক্স প্রতিক্রিয়া উদাহরণে, একই কাজ করে পরিবর্তন useCallback(x,[])করা useRef(x)
ইজাকি

useRef(x).currentএটাই.
ইজাকি

আমি আশা করি আমি ভুল, কিন্তু ডক্স কেন ভুল তা নিয়ে একটি মামলা করেছি: github.com/reactjs/reactjs.org/issues/2570
Izhaki

আমি নিজেকে useCallback(cb, [])বনাম সম্পর্কে পুরোপুরি নিশ্চিত নই useRef(cb).current। যদিও, useMemo(cb, [])এটি useRef(cb).currentএক অর্থে আলাদা যে useMemo, "কেবলমাত্র যখন নির্ভরতাগুলির কোনওটির পরিবর্তন হয়ে যায় তখনই স্মৃতিচারণ মানটি পুনরুদ্ধার করবে।" ভার্সেস useRefযা সর্বদা মান যাই হোক না কেন তা পুনরুদ্ধার করে।
ইরশুন

useRefকখনই রিকম্পিউট করে না - এটি সর্বদা প্রাথমিক মান প্রদান করে।
ইজাকি

1

আপনি ক্যালব্যাক ব্যবহার করতে বা খালি নির্ভরতার সাথে ব্যবহারের রেফ ব্যবহার করতে পারবেন, আপনি যখন ব্যবহারের সমস্ত সম্ভাব্য পরিস্থিতিতে ব্যবহার করতে পারবেন না কলব্যাক যা নির্ভরশীলতার কোনও পরিবর্তন হলে মনে রাখা যায়।

এছাড়াও আপনি যদি ব্যবহার করেন useCallback with empty dependencyবা ব্যবহার করেন তবে এটি কোনও ভারী তুলনা করতে হবে না বলে এটি পারফরম্যান্সের খুব বেশি পার্থক্য আনবে না।

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


1
ধন্যবাদ। শিরোনাম অনুসারে, এটি একটি সম্পূর্ণ খালি নির্ভরতার কেস।
ইজাকি

1
@ ইজাকি আমি আপনাকে বুঝতে পারছি প্রশ্নটি খালি নির্ভরতা এবং এই কারণেই আমি উল্লেখ করেছি যে খালি নির্ভরতার ক্ষেত্রে কোনও পার্থক্য নেই। তবে আপনি যখন আরও পরিবর্তন যুক্ত করার চেষ্টা করবেন তখন আপনার কিছুটা রিফ্যাক্টর লাগতে পারে
শুভম খাতরী

0

কারণ ব্যবহারের আউটপুটআরফ (() => {...।)। বর্তমানের পরিবর্তনযোগ্য।

যা আপনার কোডে অদ্ভুত পার্শ্ব প্রতিক্রিয়া সৃষ্টি করতে পারে। আমি যে কোনও সময় কারেন্টের মান পরিবর্তন করতে পারি। https://codesandbox.io/s/confident-monad-vjeuw

এটি ব্যবহারের রেফ ব্যবহার না করতে চাওয়ার জন্য ইউজকেস হবে


1
তবে x = useRef(value).currentকখনও পরিবর্তনীয় দৃষ্টান্ত ফেরায় refনা - কখনও ফেরানো হয় না; currentহয়। useCallbackসংস্করণ হিসাবে একই ।
ইজাকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.