
イントロダクション
ホットキーをリッスンする必要がある場合、通常はonKeyDown イベントリスナーを使用します。
しかし、twenty-front では、同時にマウントされている異なるコンポーネントで使用される同じホットキーの間で競合が生じることがあります。
例えば、Enterキーをリッスンするページと、Enterキーをリッスンするモーダル、さらにそのモーダル内のSelectコンポーネントもEnterキーをリッスンしている場合、全てが同時にマウントされると競合が生じる可能性があります。
useScopedHotkeys フック
この問題を解決するために、どのような競合もなくホットキーをリッスンすることを可能にするカスタムフックがあります。
コンポーネント内に配置すると、コンポーネントがマウントされ、指定されたホットキースコープがアクティブなときだけホットキーをリッスンします。
実際にホットキーをリッスンする方法は?
ホットキーをリッスンするための設定には2つのステップがあります:- ホットキーをリッスンするホットキースコープを設定します
- ホットキーをリッスンするために
useScopedHotkeysフックを使用します
ホットキーのユースケース
一般的に、ホットキーが必要となる動作は2つあります:- ページにマウントされたコンポーネントで
- ユーザーのアクションでフォーカスをとるモーダルタイプのコンポーネントで
ページ内でホットキーをリッスン
例:モーダルタイプのコンポーネントでホットキーをリッスン
この例では、親にモーダルを閉じるように指示するためにEscapeキーをリッスンするモーダルコンポーネントを使用します。 ここで、ユーザーの操作がスコープを変更します。ホットキースコープとは?
ホットキースコープは、ホットキーがアクティブなコンテキストを表す文字列です。 通常、enumとしてエンコードされます。 通常、enumとしてエンコードされます。 ホットキースコープを変更すると、このスコープをリッスンしているホットキーが有効になり、他のスコープをリッスンしているホットキーが無効になります。 一度に1つのスコープしか設定できません。 例として、各ページのホットキースコープはPageHotkeyScope enumで定義されています: