مرحبًا ، بدافع الفضول فقط ، يمكن استخدام useMemo
بدلاً من useRef
عند القيام بذلك على النحو التالي:
مثال:
const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);
يبدو لي أن كلا المراجعين سيعملان بشكل جيد مثل DOM ref وكقيمة قابلة للتغيير مماثلة لحقول المثيلات في الفئات. لماذا إذن يتم تطبيق useRef
بشكل مختلف مقارنة بـ useMemo
الأخذ في الاعتبار رمز ReactFiberHooks.js لـ useRef
و useMemo
؟
شكر!
هل يمكن إنشاء كائن المرجع بهذه الطريقة، ولكن سيكون أقل كفاءة منذ 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نظرًا لاستخدام كلا الخطافين بشكل متكرر ، فمن المهم أن يؤديا الأداء الأمثل حتى يتم تطبيقهما بشكل مختلف.
مرحبًا ، كيفية تنسيق الكود مثل هذا؟
@ yaofly2012 روابط تنسيقات GitHub بهذه الطريقة ، إذا قمت بالارتباط بمراجعة ملف معين وأرقام الأسطر.
التعليق الأكثر فائدة
هل يمكن إنشاء كائن المرجع بهذه الطريقة، ولكن سيكون أقل كفاءة منذ
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
نظرًا لاستخدام كلا الخطافين بشكل متكرر ، فمن المهم أن يؤديا أداءً مثاليًا: الابتسامة: لذلك يتم تطبيقهما بشكل مختلف.