React: يعيد useCallback undefined عندما يتم تقديم المكون من جانب الخادم

تم إنشاؤها على ١٥ نوفمبر ٢٠١٨  ·  4تعليقات  ·  مصدر: facebook/react

هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟

حشرة.

ما هو السلوك الحالي؟

إرجاع 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 وأي متصفح / نظام تشغيل متأثر بهذه المشكلة؟

  • رد فعل: 16.7.0 ألفا.2
  • رد فعل دوم: 16.7.0 ألفا.2
Hooks Bug

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

أعتقد أن هذا خطأ. هذا التعليق على الكود خاطئ. ما أفهمه هو أنه من الصحيح استخدام useCallback لردود نداء مرحلة التصيير.

ال 4 كومينتر

هذا سلوك متعمد.

لا يتم تنفيذ عمليات الاسترجاعات في بيئة الخادم.

أفترض أن الأساس المنطقي هو أنه نظرًا لأن عمليات رد النداء مخصصة للاستخدام مع معالجات الأحداث مثل onClick ، وهي ليست ذات مغزى أثناء SSR ، فإن React لا تحتاج حقًا إلى تتبعها ، وتحرير الموارد التي يمكن استخدامها دون داعٍ من خلال تتبع الخطافات التي لن تُستخدم أبدًا.

لا تقلق ، عند إعادة الترطيب ، ستكون عمليات الاسترجاعات موجودة.

لكن ، هل لي أن أسأل ما الذي تحاول فعله بالضبط؟

شكرًا arianon 👌 كنت redux- reaction useCallback مع useMappedState الخاصة بهم. من الناحية المفاهيمية ، الوظيفة التي أحفظها ليست في الحقيقة رد اتصال. لم ألاحظ ذلك في البداية لأن المصطلح يميل إلى استخدامه في مجموعة متنوعة من السياقات. تشير الوثائق أيضًا إلى ما يلي:

useCallback(fn, inputs) يعادل useMemo(() => fn, inputs) .

سأفتح مشكلة في مستودع المستندات لاقتراح تحديث 😉 شكرًا مرة أخرى!

أعتقد أن هذا خطأ. هذا التعليق على الكود خاطئ. ما أفهمه هو أنه من الصحيح استخدام useCallback لردود نداء مرحلة التصيير.

AFAICT الأشياء الوحيدة التي لا ينبغي تشغيل جانب الخادم هي تأثيرات تهيئة السمة والمرجع المرجع. يعد رد الاتصال أمرًا مهمًا ، على سبيل المثال ، لنمط العرض ذو الترتيب الأعلى على الترتيب ، والذي سيظل مع النظام البيئي لفترة طويلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات