Skip to main content

مقدمة

عندما تحتاج إلى الاستماع إلى مفتاح اختصار، فإنه عادةً ما تستخدم مستمع الحدث onKeyDown. في twenty-front، قد تواجه تعارضات بين نفس مفاتيح الاختصار المستخدمة في مكونات مختلفة، مركبة في الوقت نفسه. على سبيل المثال، إذا كان لديك صفحة تستمع لمفتاح Enter ومودال يستمع لمفتاح Enter، ولكن به مكون Select يستمع لمفتاح Enter، فقد تواجه تعارضًا عند تركيب الجميع في الوقت نفسه.

الخطاف useScopedHotkeys

لمعالجة هذه المشكلة، لدينا خطاف مخصص يمكن من الاستماع لمفاتيح الاختصار دون أي تعارض. تضعه داخل مكوّن، ولن يستمع إلى مفاتيح الاختصار إلا عندما يكون المكوّن مُركّبًا وعندما يكون نطاق مفاتيح الاختصار المحدّد نشطًا.

كيف تستمع إلى مفاتيح الاختصار عمليًا؟

هناك خطوتان متضمنتان في إعداد الاستماع لمفاتيح الاختصار:
  1. تعيين نطاق المفتاح الذي سيستمع لمفاتيح الاختصار
  2. استخدام الخطاف useScopedHotkeys للاستماع لمفاتيح الاختصار
إعداد نطاقات مفاتيح الاختصار ضروري حتى في الصفحات البسيطة، لأن عناصر أخرى في واجهة المستخدم مثل القائمة اليسرى أو قائمة الأوامر قد تستمع أيضًا لمفاتيح الاختصار.

حالات الاستخدام لمفاتيح الاختصار

بشكل عام، سيكون لديك حالتا استخدام تتطلبان مفاتيح الاختصار:
  1. في صفحة أو مكون مركب في صفحة
  2. في مكون من نوع مودال يتخذ التركيز بسبب إجراء من المستخدم
يمكن حدوث الحالة الثانية بشكل متكرر: على سبيل المثال، في قائمة منسدلة في مودال.

الاستماع لمفاتيح الاختصار في صفحة

مثال:

الاستماع لمفاتيح الاختصار في مكون من نوع مودال

في هذا المثال سنستخدم مكوّن نافذة منبثقة يستمع لمفتاح Escape ليطلب من المكوّن الأب إغلاقه. هنا يتمثّل تفاعل المستخدم في تغيير النطاق.
ثم في مكون المودال:
من المهم استخدام هذا النمط عندما لست متأكدا من أن استخدام تأثير الاستخدام مع التركيب/إلغاء التثبيت سيكون كافيا لتجنب الصراعات. ويمكن أن يكون من الصعب تصحيح تلك الصراعات، وقد يحدث ذلك في كثير من الأحيان بآثار استعمالية.

ما هو نطاق المفتاح؟

نطاق المفتاح هو سلسلة تمثل السياق الذي تكون فيه مفاتيح الاختصار نشطة. عادة ما تكون مشفرة كنوع مفصل. عندما تقوم بتغيير نطاق المفتاح، سيتم تمكين مفاتيح الاختصار المستمعة لهذا النطاق وتعطيل المفاتيح المستمعة لنطاقات أخرى. يمكنك تعيين نطاق واحد فقط في كل مرة. على سبيل المثال، يتم تعريف نطاقات مفاتيح الاختصار لكل صفحة في نوع “PageHotkeyScope” المفصل:
داخليًا، يتم تخزين النطاق المحدد حاليًا في ذرة Jotai مشتركة عبر التطبيق:
لكن لا يجب التعامل مع هذه الذرة يدويًا! سنرى كيف يمكن استخدامها في القسم التالي.

كيف يعمل داخليًا؟

قمنا بإنشاء غلاف رقيق فوق react-hotkeys-hook والذي يجعله أكثر كفاءة ويتجنب عمليات إعادة التقديم غير الضرورية. ونقوم أيضًا بإنشاء ذرة Jotai للتعامل مع حالة نطاق مفاتيح الاختصار وجعلها متاحة في جميع أنحاء التطبيق.