0Pricing
React Academy · Lezione

Caching, stale time e refetch in background

Configuri staleTime e gcTime per controllare quando i dati vengono nuovamente recuperati dal server.

Caching, stale time e refetch in background è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Benvenuto

In questa lezione configurerà staleTime e gcTime per controllare per quanto tempo React Query mantiene aggiornati i dati e per quanto tempo conserva in memoria i dati memorizzati nella cache.

Dati aggiornati e obsoleti

React Query tiene traccia del fatto che i dati memorizzati nella cache siano «aggiornati» o «obsoleti». I dati aggiornati vengono restituiti immediatamente senza una richiesta di rete. I dati obsoleti vengono restituiti immediatamente, ma viene avviato un refetch in background per aggiornarli.

staleTime

staleTime definisce per quanto tempo, in millisecondi, i dati rimangono aggiornati. Il valore predefinito è 0, quindi i dati diventano immediatamente obsoleti. Impostandolo su 60000, i dati recuperati nell'ultimo minuto vengono restituiti senza un refetch in background.
useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 60_000, // fresh for 60 seconds
})

Impostare staleTime per i dati statici

Per i dati che cambiano raramente, come l'elenco dei Paesi o le opzioni di configurazione, imposti uno staleTime elevato. Per i dati in tempo reale, come i prezzi delle azioni, mantenga il valore predefinito 0 e abiliti il polling.
// Effectively never stale — reload only on explicit invalidation
useQuery({ queryKey: ['countries'], queryFn: fetchCountries,
  staleTime: Infinity })

gcTime (garbage collection)

gcTime, precedentemente cacheTime, definisce per quanto tempo i dati memorizzati nella cache e NON utilizzati rimangono in memoria prima di essere rimossi dalla garbage collection. Il valore predefinito è 5 minuti. Anche dopo gcTime, React Query può eseguire immediatamente un nuovo refetch se viene montato un nuovo sottoscrittore.
useQuery({
  queryKey: ['products'],
  queryFn: fetchProducts,
  gcTime: 10 * 60 * 1000, // keep in memory for 10 minutes
})

staleTime e gcTime

staleTime controlla QUANDO eseguire il refetch, cioè l'aggiornamento dei dati. gcTime controlla QUANDO eliminare i dati memorizzati nella cache dalla memoria. La relazione tipica è staleTime <= gcTime.

Indicatori di refetch in background

Quando React Query esegue un refetch in background, `isFetching` è true anche se `isLoading` è false, perché i dati sono già memorizzati nella cache. Utilizzi isFetching per mostrare uno spinner discreto.
const { data, isLoading, isFetching } = useQuery({ /* ... */ });

return (
  <>
    {isLoading ? <Spinner /> : <DataView data={data} />}
    {isFetching && !isLoading && <RefreshIndicator />}
  </>
);

refetchOnWindowFocus

Per impostazione predefinita, React Query esegue il refetch delle query obsolete quando l'utente torna alla scheda. Disabiliti questa opzione per i dati che vengono aggiornati raramente.
useQuery({
  queryKey: ['settings'],
  queryFn: fetchSettings,
  refetchOnWindowFocus: false,
})

refetchInterval per il polling

Imposti `refetchInterval` per eseguire automaticamente il polling di una query a intervalli prestabiliti. È utile per i dashboard con dati in tempo reale.
useQuery({
  queryKey: ['liveStats'],
  queryFn: fetchStats,
  refetchInterval: 5000, // every 5 seconds
})

Dati segnaposto

Utilizzi `placeholderData` per mostrare i dati precedenti mentre è in corso un refetch, evitando spostamenti del layout. L'opzione keepPreviousData semplifica questa operazione per la paginazione.
import { keepPreviousData } from '@tanstack/react-query';

useQuery({
  queryKey: ['posts', page],
  queryFn: () => fetchPage(page),
  placeholderData: keepPreviousData,
})

Verifica rapida

Che cosa si ottiene impostando staleTime: Infinity su una query?

Riepilogo

staleTime controlla l'aggiornamento, cioè per quanto tempo passa prima che i dati attivino un refetch in background. gcTime controlla la memoria, cioè per quanto tempo i dati inutilizzati rimangono nella cache. isFetching segnala i refetch in background. Utilizzi placeholderData per una paginazione fluida.

Prossimo argomento

Prossima lezione: **Mutations with useMutation** — invierà dati alle API e invaliderà le query dopo un'operazione riuscita.

Domande Frequenti

La lezione «Caching, stale time e refetch in background» è gratuita?

Sì — il testo completo di «Caching, stale time e refetch in background» è 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 «Caching, stale time e refetch in background»?

Configuri staleTime e gcTime per controllare quando i dati vengono nuovamente recuperati dal server. 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 2 di 4.

Quanto tempo richiede la lezione «Caching, stale time e refetch in background»?

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. Configurazione di React Query e QueryClient
  2. Caching, stale time e refetch in background
  3. Mutation con useMutation
  4. Scroll infinito e paginazione con useInfiniteQuery
← Torna a React Academy