React: السؤال: هل يمكن استخدام useMemo بدلاً من useRef؟

تم إنشاؤها على ٣ فبراير ٢٠٢٠  ·  3تعليقات  ·  مصدر: facebook/react

مرحبًا ، بدافع الفضول فقط ، يمكن استخدام useMemo بدلاً من useRef عند القيام بذلك على النحو التالي:

مثال:

const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);

يبدو لي أن كلا المراجعين سيعملان بشكل جيد مثل DOM ref وكقيمة قابلة للتغيير مماثلة لحقول المثيلات في الفئات. لماذا إذن يتم تطبيق useRef بشكل مختلف مقارنة بـ useMemo الأخذ في الاعتبار رمز ReactFiberHooks.js لـ useRef و useMemo ؟

شكر!

Invalid Question

التعليق الأكثر فائدة

هل يمكن إنشاء كائن المرجع بهذه الطريقة، ولكن سيكون أقل كفاءة منذ useMemo أيضا المسارات ويقارن التبعيات. (حتى إذا قمت بتحديد مصفوفة تبعية فارغة ، فإن بنية البيانات الأساسية لخطاف المذكرة بها مساحة للقيمة الإضافية.)

لتوضيح ذلك ، يمكنك مقارنة تنفيذ useRef :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

إلى useMemo :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

نظرًا لاستخدام كلا الخطافين بشكل متكرر ، فمن المهم أن يؤديا أداءً مثاليًا: الابتسامة: لذلك يتم تطبيقهما بشكل مختلف.

ال 3 كومينتر

هل يمكن إنشاء كائن المرجع بهذه الطريقة، ولكن سيكون أقل كفاءة منذ useMemo أيضا المسارات ويقارن التبعيات. (حتى إذا قمت بتحديد مصفوفة تبعية فارغة ، فإن بنية البيانات الأساسية لخطاف المذكرة بها مساحة للقيمة الإضافية.)

لتوضيح ذلك ، يمكنك مقارنة تنفيذ useRef :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

إلى useMemo :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

نظرًا لاستخدام كلا الخطافين بشكل متكرر ، فمن المهم أن يؤديا أداءً مثاليًا: الابتسامة: لذلك يتم تطبيقهما بشكل مختلف.

يمكنك _could_ إنشاء كائن ref بهذه الطريقة ، ولكنه سيكون أقل كفاءة نظرًا لأن useMemo يتتبع أيضًا ويقارن التبعيات. (حتى إذا قمت بتحديد مصفوفة تبعية فارغة ، فإن بنية البيانات الأساسية لخطاف المذكرة بها مساحة للقيمة الإضافية.)

لتوضيح ذلك ، يمكنك مقارنة تنفيذ useRef :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

إلى useMemo :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

نظرًا لاستخدام كلا الخطافين بشكل متكرر ، فمن المهم أن يؤديا الأداء الأمثل حتى يتم تطبيقهما بشكل مختلف.

مرحبًا ، كيفية تنسيق الكود مثل هذا؟
image

@ yaofly2012 روابط تنسيقات GitHub بهذه الطريقة ، إذا قمت بالارتباط بمراجعة ملف معين وأرقام الأسطر.

  1. فتح ملف
  2. انقر على رقم الخط
  3. اضغط باستمرار على SHIFT وانقر فوق رقم سطر آخر لتحديد نطاق
  4. اكتب "y" للتثبيت في النسخة الحالية
  5. انسخ والصق عنوان URL إلى GitHub
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات