Skip to main content

Introduzione

Quando hai bisogno di ascoltare un tasto di scelta rapida, normalmente useresti l’evento onKeyDown. In twenty-front, tuttavia, potresti avere conflitti tra gli stessi tasti di scelta rapida che sono utilizzati in componenti diversi, montati nello stesso momento. Ad esempio, se hai una pagina che ascolta il tasto Invio, e una modale che ascolta lo stesso tasto, con un componente Select all’interno della modale che ascolta il tasto Invio, potresti avere un conflitto quando tutti sono montati contemporaneamente.

L’hook useScopedHotkeys

Per gestire questo problema, abbiamo un hook personalizzato che rende possibile ascoltare i tasti di scelta rapida senza alcun conflitto. Lo posizioni in un componente, e ascolterà i tasti solo quando il componente è montato E quando l’ambito del tasto di scelta rapida specificato è attivo.

Come ascoltare i tasti di scelta rapida nella pratica?

Sono coinvolti due passaggi nell’impostazione dell’ascolto dei tasti di scelta rapida:
  1. Imposta l’ambito del tasto di scelta rapida che ascolterà i tasti di scelta rapida
  2. Usa l’hook useScopedHotkeys per ascoltare i tasti di scelta rapida
Configurare gli ambiti dei tasti di scelta rapida è necessario anche in pagine semplici, perché altri elementi dell’interfaccia utente come il menu a sinistra o il menu dei comandi potrebbero anch’essi ascoltare i tasti di scelta rapida.

Casi d’uso per i tasti di scelta rapida

In generale, avrai due casi d’uso che richiedono tasti di scelta rapida:
  1. In una pagina o un componente montato in una pagina
  2. In un componente di tipo modale che prende il focus a causa di un’azione dell’utente
Il secondo caso d’uso può verificarsi in modo ricorsivo: ad esempio, un menu a tendina in una modale.

Ascoltare i tasti di scelta rapida in una pagina

Esempio:

Ascoltare i tasti di scelta rapida in un componente di tipo modale

Per questo esempio utilizzeremo un componente modale che ascolta il tasto Esc per segnalare al suo genitore di chiuderlo. Qui l’interazione dell’utente sta cambiando l’ambito.
Poi nel componente modale:
È importante utilizzare questo schema quando non sei sicuro che l’utilizzo di useEffect con mount/unmount sarà sufficiente per evitare conflitti. Quei conflitti possono essere difficili da debug, e potrebbe accadere più spesso che no con useEffects.

Che cos’è un ambito del tasto di scelta rapida?

Un ambito del tasto di scelta rapida è una stringa che rappresenta un contesto in cui i tasti di scelta rapida sono attivi. È generalmente codificato come un enum. Quando cambi l’ambito del tasto di scelta rapida, i tasti di scelta rapida che ascoltano questo ambito saranno abilitati e i tasti che ascoltano altri ambiti saranno disabilitati. Puoi impostare solo un ambito alla volta. Ad esempio, gli ambiti dei tasti di scelta rapida per ogni pagina sono definiti nell’enum PageHotkeyScope:
Internamente, l’ambito selezionato attualmente viene memorizzato in un atomo Jotai condiviso in tutta l’applicazione:
Ma questo atomo non dovrebbe mai essere gestito manualmente! Vedremo come usarlo nella sezione successiva.

Come funziona internamente?

Abbiamo creato un sottile wrapper su react-hotkeys-hook che lo rende più performante ed evita rendering non necessari. Creiamo anche un atomo Jotai per gestire lo stato dell’ambito del tasto di scelta rapida e renderlo disponibile ovunque nell’applicazione.