React Academy · Lezione

Suggerimenti asincroni con debounce

Recuperare suggerimenti da un'API mentre l'utente digita, applicando il debounce per evitare richieste di rete eccessive

Lezione 3 di 413 passaggi

Suggerimenti asincroni con debounce è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Sostituzione del filtro statico con una richiesta API

Invece di filtrare un array locale, chiami un endpoint API che restituisce suggerimenti corrispondenti alla query. La chiamata API va inserita in un useEffect che dipende dal valore dell'input sottoposto a debounce. In questo modo la responsabilità del filtraggio passa al server, consentendo il fuzzy matching, l'ordinamento per rilevanza e suggerimenti provenienti da un dataset molto più ampio.

Nuovo stato per caricamento ed errori

Aggiunga due nuove variabili di stato all'autocomplete: isLoading (booleano) per mostrare uno spinner mentre la richiesta è in corso ed error (stringa o null) per visualizzare un messaggio di errore quando la richiesta fallisce. In questo modo l'utente riceve un feedback sull'operazione asincrona, invece di chiedersi perché i suggerimenti non compaiano.

L'effetto per il fetch

Nel useEffect per il fetch, imposti setIsLoading(true) e setError(null) all'inizio, quindi esegua fetch(url), analizzi il JSON, chiami setSuggestions(data) e infine imposti setIsLoading(false) in un blocco finally o dopo entrambi i percorsi, quello di successo e quello di errore. L'array delle dipendenze dell'effetto contiene soltanto debouncedInputValue.

Uso di AbortController per annullare le richieste

Crei un nuovo AbortController all'inizio dell'effetto e passi controller.signal alle opzioni del fetch. Nella funzione di pulizia, chiami controller.abort(). Quando l'utente digita e il valore sottoposto a debounce cambia, il fetch precedente viene annullato prima che ne inizi uno nuovo, impedendo l'arrivo di risultati obsoleti in ordine errato.

Gestione degli errori di annullamento

Quando un fetch viene annullato, viene rifiutato con una DOMException denominata AbortError. Nel blocco catch, verifichi if (err.name === 'AbortError') return; per ignorare silenziosamente i fetch annullati. Gestisca soltanto gli errori di rete effettivi o gli errori API che devono essere mostrati all'utente.

Gestione dello stato isLoading

Imposti isLoading su true prima del fetch e su false dopo che questo è stato completato con successo o ha restituito un errore. Usi un blocco finally per assicurarsi che venga sempre reimpostato: fetch(url).then(...).catch(...).finally(() => setIsLoading(false)). Senza il blocco finally, un errore del fetch lascerebbe lo spinner attivo per sempre.

Spinner di caricamento nel dropdown

Quando isLoading è true e l'input contiene del testo, mostri il dropdown con uno spinner centrato al suo interno anziché l'elenco dei suggerimenti. In questo modo l'utente sa che i risultati stanno arrivando. Quando il caricamento è terminato e i suggerimenti sono disponibili, sostituisca lo spinner con gli elementi effettivi.

Stato di errore nel dropdown

Quando error non è null, mostri il dropdown con il messaggio di errore al posto dei suggerimenti. Un messaggio come "Impossibile caricare i suggerimenti. Riprovi." è più comprensibile di una stringa di errore grezza. Può anche aggiungere un pulsante per riprovare che riattivi manualmente il fetch.

Soglia minima di caratteri

Eviti di eseguire il fetch per stringhe vuote o query molto brevi, che producono troppi risultati irrilevanti. Inserisca questa condizione all'inizio dell'effetto: if (debouncedInputValue.length < 2) { setSuggestions([]); return; }. In questo modo riduce le chiamate API non necessarie ed evita un elenco di risultati eccessivo a partire da un solo carattere.

Memorizzazione nella cache dei risultati recuperati

Memorizzi i risultati recuperati in una Map di useRef: const cache = useRef(new Map()). Prima di eseguire il fetch, verifichi if (cache.current.has(query)) { setSuggestions(cache.current.get(query)); return; }. Dopo un fetch completato con successo, memorizzi il risultato. In questo modo elimina le richieste di rete ridondanti per le query già digitate dall'utente.

Ritardo di debounce consigliato

Per l'autocomplete in particolare, un ritardo di debounce di 200-300 ms è il giusto compromesso. Ritardi più brevi (inferiori a 200 ms) attivano troppe richieste per chi digita velocemente. Ritardi più lunghi (superiori a 400 ms) fanno sembrare i suggerimenti lenti e poco reattivi. 250 ms è un valore predefinito comunemente usato nelle implementazioni autocomplete in produzione.

AbortController nell'autocomplete

Perché AbortController è importante in un autocomplete con debounce che recupera dati da un'API?

Riepilogo della lezione: suggerimenti asincroni con debounce

Sostituisca il filtraggio statico con un fetch API all'interno di un useEffect che dipende dal valore sottoposto a debounce. Usi AbortController per annullare le richieste obsolete. Aggiunga gli stati isLoading ed error per fornire un feedback all'utente. Imposti una soglia minima di caratteri per evitare chiamate eccessive. Memorizzi i risultati in una ref per saltare le richieste di rete ridondanti.

Gratis per iniziare

Impara React con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
88
Lezioni
324

Domande Frequenti

La lezione «Suggerimenti asincroni con debounce» è gratuita?

Sì — il testo completo di «Suggerimenti asincroni con debounce» è 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 «Suggerimenti asincroni con debounce»?

Recuperare suggerimenti da un'API mentre l'utente digita, applicando il debounce per evitare richieste di rete eccessive 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 3 di 4.

Quanto tempo richiede la lezione «Suggerimenti asincroni con debounce»?

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

  1. Input controllato con lista di suggerimenti
  2. Navigazione da tastiera nelle liste di suggerimenti
  3. Suggerimenti asincroni con debounce
  4. Accessibilità dei widget di completamento automatico
← Torna a React Academy