React: تعليق الزناد من الخطافات

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

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

سؤال. قد يكون هذا أيضًا مرتبطًا بـ # 14563.

كيف نثير التشويق من الخطاف؟

لماذا طرح السؤال؟

ظهر هذا السؤال أثناء استخدامنا لـ react-i18next . قدم تحديث حديث لـ react-i18next خطاف useTranslation والذي يسمح بالحصول على الترجمات الحالية وسيؤدي أيضًا إلى تحميل مساحات أسماء الترجمة التي لم يتم تحميلها بعد (مثل تقسيم الكود).

للتعامل مع الحالة التي لم يتم فيها تحميل الترجمات بعد ، فإن الخطاف useTranslation -hook يلقي وعدًا بتشغيل Suspense ، وهو أمر رائع حقًا لأنه يتكامل تمامًا مع ميزات التفاعل الحالية!

ومع ذلك ، إذا كنت تستخدم المزيد من الخطافات بعد استدعاء الخطاف useTranslation ، فلن يتم عرض هذه الخطافات الأخرى إذا كان useTranslation يلقي الوعد. بمجرد تحميل الترجمات ، لن يتم إلقاء الخطاف بعد الآن وسيمنحك رد الفعل تحذيرًا أحمر كبير بأن كمية الخطافات قد تغيرت.

مثال

const Component = () => {
  const [t] = useTranslation('translationnamespace');
  const [count, setCount] = useState(0);

  return (
    <div onClick={() => setCount(count + 1)}>
      {t('The count is:')} {count}
    </div>
  );
};

إذا لم يتم تحميل translationnamespace بعد ، فسيتم طرح useTranslation ، مما يتسبب في عدم عرض useState . مرة واحدة translationnamespace يتم تحميل، useTranslation لن رمي بعد الآن، والذي يسبب useState سيتم عرضها تسبب التحذير.

الحالة العامة

لذلك لا ينطبق هذا السؤال على رد فعل i18 التالي فقط ، ولكنه ينطبق بدلاً من ذلك على جميع الخطافات التي ترغب في إثارة التشويق. كيف يمكننا القيام بذلك ، وكيف يمكن أن يتكامل هذا مع "قواعد الخطافات" الحالية التي تنص على أنه لا يجب تقديم الخطافات بشروط؟

Hooks Suspense Bug

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

أعتقد أننا أصلحنا هذا بالفعل في 16.8.2. يرجى فتح واحدة جديدة بها حالة إعادة إنتاج إذا لم يكن الأمر كذلك.

ال 3 كومينتر

يبدو أنه من الخطأ أن يحدث الخطأ في حالة الإيقاف. آفاق أن لم يكن متعمدا.

حسنًا ، من الجيد معرفة!

قد ترغب أيضًا في توثيق أنه سلوك محدد لعدم عرض جميع الخطافات في حالة التعليق. لكنني أفترض أن هذا سيتم بمجرد تقديم التعليق رسميًا كآلية لجلب البيانات.

أعتقد أننا أصلحنا هذا بالفعل في 16.8.2. يرجى فتح واحدة جديدة بها حالة إعادة إنتاج إذا لم يكن الأمر كذلك.

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