
Введение
Когда вам нужно прослушивать горячую клавишу, вы обычно используете обработчик событийonKeyDown.
Однако в twenty-front могут возникнуть конфликты между одинаковыми горячими клавишами, которые используются в разных компонентах, смонтированных одновременно.
Например, если у вас есть страница, которая реагирует на клавишу Enter, и модальное окно, реагирующее на ту же клавишу Enter, с компонентом Select внутри этого окна, то может возникнуть конфликт, когда все они смонтированы одновременно.
Хук useScopedHotkeys
Для решения этой проблемы у нас есть индивидуальный хук, который позволяет мониторить горячие клавиши без конфликтов.
Вы размещаете его в компоненте, и он будет реагировать на горячие клавиши только тогда, когда компонент смонтирован И заданные области горячих клавиш активны.
Как прослушивать горячие клавиши на практике?
Настройка мониторинга горячих клавиш включает в себя два шага :- Установить область горячих клавиш, которая будет реагировать на горячие клавиши
- Использовать хук
useScopedHotkeysдля мониторинга горячих клавиш
Кейсы использования горячих клавиш
В общем, у вас будет два случая использования, требующих горячих клавиш :- На странице или в компоненте, смонтированном на странице
- В компоненте типа модального окна, который фокусируется из-за действия пользователя
Прослушивание горячих клавиш на странице
Пример :Прослушивание горячих клавиш в компоненте типа модального окна
For this example we’ll use a modal component that listens for the Escape key to tell its parent to close it. В этом случае взаимодействие пользователя меняет область операций.Что такое область горячих клавиш?
Область горячих клавиш — это строка, представляющая собой контекст, в котором активны горячие клавиши. Она обычно кодируется в виде перечисления (enum). При изменении области горячих клавиш, горячие клавиши, слушающие эту область, будут включены, а слушающие другие области — отключены. Вы можете установить только одну область за раз. Например, области горячих клавиш для каждой страницы определены в enumPageHotkeyScope: