useHeldKeys
Les touches actuellement maintenues, partagées entre tous les abonnés via un seul jeu d'écouteurs sur window.
[]pnpm dlx shadcn@latest add https://hextaui.com/r/use-held-keys.jsonAjoute le hook et tout ce dont il dépend à votre projet.
Copiez et collez le code suivant dans votre projet.
hooks/use-held-keys.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Utilisez-le pour tout ce qui réagit à des touches maintenues plutôt qu'appuyées : des capuchons qui s'enfoncent, des indices de raccourci qui apparaissent quand vous maintenez ⌘, ou un modificateur qui change d'outil, comme Alt pour dupliquer pendant un glissement.
Chaque composant qui appelle le hook partage un même store. Le premier abonné ajoute des écouteurs passifs keydown et keyup sur window, et le dernier à se désabonner les retire. Une page de cinquante capuchons à l'écoute n'a toujours qu'une paire d'écouteurs.
Les écouteurs ne font que lire les événements. Ils n'appellent jamais preventDefault et se placent sur window, après les gestionnaires propres de React : la saisie dans un champ n'est donc jamais retardée ni modifiée.
- Les lettres et chiffres viennent de
event.code, la touche physique : maintenir Option+K sur un Mac signale donc toujoursket non˚. - La répétition de touche est ignorée, et rien n'est re-rendu tant qu'une touche est maintenue.
- macOS n'envoie pas
keyuppour les autres touches tant que ⌘ est enfoncée. Quand ⌘ est relâchée, le store ne garde que les modificateurs encore maintenus, pour que les lettres ne restent pas bloquées. - Tout est relâché quand la fenêtre perd le focus ou que l'onglet est masqué. Un raccourci qui change d'application ne laisse rien de maintenu.
Des capuchons qui s'enfoncent
<Kbd listen> repose sur ce hook. Chaque capuchon s'enfonce tant que sa touche est maintenue.
- Passez
falsepour arrêter d'écouter. Le hook renvoie alors un ensemble vide et n'ajoute aucun écouteur : l'appeler sans condition ne coûte rien. - L'ensemble n'est remplacé que lorsqu'une touche est enfoncée ou relâchée, si bien que son identité sert de dépendance à un memo ou à un effet.
- Pour les raccourcis qui déclenchent une action, utilisez plutôt
matchesHotkeydeHotkeydans un gestionnaire keydown. Suivre les touches maintenues sert à montrer un état, pas à exécuter des commandes. - Côté serveur, et avant l'hydratation, l'ensemble est vide.
| Prop | Type | Par défaut |
|---|---|---|
enabledIndique s'il faut écouter. Si false, rien n'est attaché. | boolean | – |
| Valeur de retour | Description |
|---|---|
ReadonlySet<string> | Les noms des touches actuellement maintenues. |
Kbd et KbdGroup via leur prop listen.