useHeldKeys
As teclas que alguém está segurando agora, compartilhadas por todos os assinantes por meio de um único conjunto de listeners na janela.
[]pnpm dlx shadcn@latest add https://hextaui.com/r/use-held-keys.jsonAdiciona o hook e tudo de que ele depende ao seu projeto.
Copie e cole o código a seguir no seu projeto.
hooks/use-held-keys.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Use para qualquer coisa que reaja a teclas seguradas em vez de pressionadas: teclas que afundam, dicas de atalho que aparecem enquanto você segura ⌘, ou um modificador que troca uma ferramenta, como Alt para duplicar ao arrastar.
Todo componente que chama o hook compartilha um único store. O primeiro assinante adiciona listeners passivos de keydown e keyup em window, e o último a cancelar a assinatura os remove. Uma página com cinquenta teclas escutando ainda tem um par de listeners.
Os listeners apenas leem eventos. Nunca chamam preventDefault e ficam em window, depois dos handlers do próprio React, então digitar em um campo nunca é atrasado nem alterado.
- Letras e dígitos vêm de
event.code, a tecla física, então segurar Option+K em um Mac ainda informakem vez de˚. - A repetição de tecla é ignorada, e nada é renderizado novamente enquanto uma tecla está segurada.
- O macOS não envia
keyuppara outras teclas enquanto ⌘ está pressionada. Quando ⌘ é solta, o store mantém apenas os modificadores ainda segurados, para letras não ficarem presas. - Tudo é liberado quando a janela perde o foco ou a aba fica oculta. Um atalho que troca de app não deixa nada preso.
Teclas que pressionam
<Kbd listen> é construído sobre este hook. Cada tecla é pressionada enquanto sua tecla real está segurada.
- Passe
falsepara parar de escutar. O hook então retorna um conjunto vazio e não adiciona listeners, então é barato chamá-lo incondicionalmente. - O conjunto só é substituído quando uma tecla é pressionada ou solta, então sua identidade funciona como dependência de memo ou effect.
- Para atalhos que disparam uma ação, use
matchesHotkeydeHotkeyem um handler de keydown. Segurar teclas serve para mostrar estado, não para executar comandos. - No servidor, e antes da hidratação, o conjunto está vazio.
| Prop | Tipo | Padrão |
|---|---|---|
enabledSe deve escutar. Quando false, nada é anexado. | boolean | – |
| Retorna | Descrição |
|---|---|
ReadonlySet<string> | Os nomes das teclas seguradas agora. |
Kbd e KbdGroup por meio da sua prop listen.