هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟
حشرة.
ما هو السلوك الحالي؟
إرجاع React.useCallback
undefined
عندما يتم عرض المكون من جانب الخادم.
إذا كان السلوك الحالي عبارة عن خطأ ، فالرجاء تقديم خطوات إعادة الإنتاج ، وإن أمكن عرضًا بسيطًا للمشكلة. الصق الرابط إلى JSFiddle (https://jsfiddle.net/Luktwrdm/) أو مثال CodeSandbox (https://codesandbox.io/s/new) أدناه:
يمكن إعادة إنتاج هذا الخطأ عن طريق إنشاء مكون React باستخدام useCallback
. ينتج عن تسجيل قيمة الإرجاع على الخادم undefined
بينما يقوم بإرجاع الوظيفة بشكل صحيح في المستعرض.
يمكنك ملاحظة هذا الخطأ في CodeSandbox هذا: https://codesandbox.io/s/r557kww6wn يتم تقديم التطبيق بشكل صحيح إلى خطأ سلسلة ينظر إلى وحدة التحكم ، سترى أن قيمة الإرجاع useCallback
هي undefined
.
إليك نفس التطبيق بالضبط ولكن يتم عرضه على العميل: https://codesandbox.io/s/xvwv797pxz يتم تسجيل الوظيفة بشكل صحيح في وحدة التحكم.
ما هو السلوك المتوقع؟
React.useCallback
بإرجاع رد الاتصال المحفوظ في ذاكرة ، وليس undefined
.
ما إصدارات React وأي متصفح / نظام تشغيل متأثر بهذه المشكلة؟
لا يتم تنفيذ عمليات الاسترجاعات في بيئة الخادم.
أفترض أن الأساس المنطقي هو أنه نظرًا لأن عمليات رد النداء مخصصة للاستخدام مع معالجات الأحداث مثل onClick
، وهي ليست ذات مغزى أثناء SSR ، فإن React لا تحتاج حقًا إلى تتبعها ، وتحرير الموارد التي يمكن استخدامها دون داعٍ من خلال تتبع الخطافات التي لن تُستخدم أبدًا.
لا تقلق ، عند إعادة الترطيب ، ستكون عمليات الاسترجاعات موجودة.
لكن ، هل لي أن أسأل ما الذي تحاول فعله بالضبط؟
شكرًا arianon 👌 كنت redux- reaction useCallback
مع useMappedState الخاصة بهم. من الناحية المفاهيمية ، الوظيفة التي أحفظها ليست في الحقيقة رد اتصال. لم ألاحظ ذلك في البداية لأن المصطلح يميل إلى استخدامه في مجموعة متنوعة من السياقات. تشير الوثائق أيضًا إلى ما يلي:
useCallback(fn, inputs)
يعادلuseMemo(() => fn, inputs)
.
سأفتح مشكلة في مستودع المستندات لاقتراح تحديث 😉 شكرًا مرة أخرى!
أعتقد أن هذا خطأ. هذا التعليق على الكود خاطئ. ما أفهمه هو أنه من الصحيح استخدام useCallback لردود نداء مرحلة التصيير.
AFAICT الأشياء الوحيدة التي لا ينبغي تشغيل جانب الخادم هي تأثيرات تهيئة السمة والمرجع المرجع. يعد رد الاتصال أمرًا مهمًا ، على سبيل المثال ، لنمط العرض ذو الترتيب الأعلى على الترتيب ، والذي سيظل مع النظام البيئي لفترة طويلة.
التعليق الأكثر فائدة
أعتقد أن هذا خطأ. هذا التعليق على الكود خاطئ. ما أفهمه هو أنه من الصحيح استخدام useCallback لردود نداء مرحلة التصيير.