Input controllato con lista di suggerimenti
Creare la base: un input controllato che mostri un menu a discesa filtrato dei suggerimenti
Input controllato con lista di suggerimenti è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
Panoramica della struttura del componente
Un componente di completamento automatico ha due parti principali: un campo di testo controllato e un elenco a discesa di suggerimenti. Il campo si trova nel normale flusso del documento, mentre l'elenco a discesa è posizionato in modo assoluto direttamente sotto di esso. Insieme funzionano come un unico widget interattivo, sebbene siano elementi DOM distinti.
Variabili di stato necessarie
Sono necessarie quattro variabili di stato: inputValue (stringa — ciò che è stato digitato), suggestions (array — gli elementi che corrispondono attualmente), isOpen (booleano — indica se l'elenco a discesa è visibile) e selectedIndex (numero — indica quale suggerimento è evidenziato per la navigazione da tastiera; parte da -1 quando non è selezionato alcun elemento).
Controllo dell'input
Rendere l'input completamente controllato: value={inputValue} e onChange={e => setInputValue(e.target.value)}. In questo modo React controlla completamente il testo visualizzato. Ogni pressione di un tasto aggiorna lo stato, attivando un nuovo rendering con il nuovo valore. Non usare mai un input non controllato per il completamento automatico: è necessario poter leggere e impostare il valore a livello programmatico.
Filtro da un elenco statico
Quando i suggerimenti provengono da un array locale, applicare il filtro a ogni rendering in base a inputValue: confrontare ogni elemento usando item.toLowerCase().includes(inputValue.toLowerCase()). È possibile calcolarlo con useMemo se l'elenco è grande, per evitare di ricalcolarlo a ogni nuovo rendering. Per gli elenchi piccoli, il filtro inline va bene.
Visualizzazione e chiusura dell'elenco a discesa
Aprire l'elenco a discesa quando inputValue.length > 0 e suggestions.length > 0. Chiuderlo quando l'input perde il focus, con un piccolo ritardo per consentire prima la registrazione dei clic sui suggerimenti, quando viene selezionato un suggerimento o quando viene premuto il tasto Escape. Impostare isOpen di conseguenza per controllare il rendering condizionale.
Gestione di blur con un ritardo
L'evento onBlur si verifica quando l'input perde il focus, ad esempio quando l'utente fa clic su un suggerimento. Se si chiude immediatamente l'elenco a discesa durante il blur, il clic sul suggerimento non viene registrato perché l'elenco scompare prima che il clic venga attivato. Usare setTimeout(() => setIsOpen(false), 150) per dare al clic il tempo di essere registrato.
Stile dell'elenco a discesa
Posizionare l'elenco a discesa con position: absolute in modo che si sovrapponga al contenuto sottostante invece di spingerlo verso il basso. Impostare uno z-index elevato (100+) affinché venga visualizzato sopra gli altri contenuti. Impostare un max-height con overflow-y: auto per evitare che l'elenco diventi troppo alto quando sono presenti molti risultati.
Rendere cliccabili i suggerimenti
Ogni suggerimento dovrebbe avere un gestore onClick: onClick={() => { setInputValue(suggestion); setIsOpen(false); }}. In questo modo l'input viene impostato sul suggerimento selezionato e l'elenco a discesa viene chiuso. La selezione risulta immediata e naturale, in linea con il comportamento che gli utenti si aspettano dai campi di completamento automatico.
Impedire blur prima del click
Un'alternativa al timeout per il blur consiste nell'usare onMouseDown={e => e.preventDefault()} su ogni elemento suggerimento. In questo modo si impedisce a mousedown di sottrarre il focus all'input, quindi l'evento blur non si verifica quando si fa clic su un suggerimento. L'input mantiene il focus e il gestore del clic viene eseguito senza problemi.
Panoramica dell'interazione da tastiera
Un buon completamento automatico deve essere navigabile da tastiera. L'utente deve poter premere ArrowDown per evidenziare il primo suggerimento, continuare a premerlo per scorrere l'elenco, premere Enter per selezionare e premere Escape per chiudere senza selezionare. Questa funzionalità si implementa gestendo onKeyDown sull'elemento input.
Reimpostazione di selectedIndex al cambio dell'input
Ogni volta che l'utente digita e inputValue cambia, reimpostare selectedIndex su -1. In questo modo si cancella qualsiasi selezione precedente da tastiera, così il nuovo insieme di suggerimenti filtrati non presenta inizialmente alcun elemento evidenziato. Un indice di selezione obsoleto che punta a un elemento diverso dopo la modifica dell'elenco è fonte di confusione e non è corretto.
Ordine degli eventi blur e mousedown
Perché usare onMouseDown con e.preventDefault() sugli elementi suggerimento invece di affidarsi a un timeout per il blur?
Riepilogo della lezione: input controllato con suggerimenti
Un widget di completamento automatico richiede quattro variabili di stato: inputValue, suggestions, isOpen e selectedIndex. Utilizzare un input controllato, filtrare i suggerimenti in base all'input e gestire la visibilità dell'elenco a discesa tramite isOpen. Gestire la condizione di competizione blur-before-click con un timeout oppure con onMouseDown preventDefault. Reimpostare selectedIndex ogni volta che cambia l'input.
Domande Frequenti
La lezione «Input controllato con lista di suggerimenti» è gratuita?
Sì — il testo completo di «Input controllato con lista di suggerimenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Input controllato con lista di suggerimenti»?
Creare la base: un input controllato che mostri un menu a discesa filtrato dei suggerimenti Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Input controllato con lista di suggerimenti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Input controllato con lista di suggerimenti
- Navigazione da tastiera nelle liste di suggerimenti
- Suggerimenti asincroni con debounce
- Accessibilità dei widget di completamento automatico