0Pricing
React Academy · Lekcja

Buforowanie, czas nieaktualności i odświeżanie w tle

Konfigurowanie staleTime i gcTime w celu kontrolowania, kiedy dane są ponownie pobierane z serwera.

Buforowanie, czas nieaktualności i odświeżanie w tle to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Wprowadzenie

W tej lekcji skonfigurują Państwo staleTime i gcTime, aby kontrolować, jak długo React Query uznaje dane za aktualne oraz jak długo przechowuje dane w pamięci podręcznej.

Dane aktualne a nieaktualne

React Query śledzi, czy dane w pamięci podręcznej są „fresh”, czy „stale”. Aktualne dane są zwracane natychmiast bez żądania sieciowego. Nieaktualne dane są zwracane natychmiast, ale w tle rozpoczyna się ich ponowne pobieranie w celu aktualizacji.

staleTime

staleTime określa, jak długo (w milisekundach) dane pozostają aktualne. Wartość domyślna to 0 (dane natychmiast stają się nieaktualne). Ustawienie wartości 60000 oznacza, że dane pobrane w ciągu ostatniej minuty zostaną zwrócone bez ponownego pobierania w tle.
useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 60_000, // fresh for 60 seconds
})

Ustawianie staleTime dla danych statycznych

W przypadku danych, które rzadko się zmieniają (np. listy krajów lub opcji konfiguracji), ustaw dużą wartość staleTime. W przypadku danych aktualizowanych na bieżąco (np. cen akcji) pozostaw domyślną wartość 0 i włącz odpytywanie cykliczne.
// Effectively never stale — reload only on explicit invalidation
useQuery({ queryKey: ['countries'], queryFn: fetchCountries,
  staleTime: Infinity })

gcTime (czyszczenie pamięci)

gcTime (wcześniej cacheTime) określa, jak długo NIEUŻYWANE dane w pamięci podręcznej pozostają w pamięci, zanim zostaną usunięte. Wartość domyślna to 5 minut. Nawet po upływie gcTime React Query może natychmiast ponownie pobrać dane, jeśli zostanie zamontowany nowy subskrybent.
useQuery({
  queryKey: ['products'],
  queryFn: fetchProducts,
  gcTime: 10 * 60 * 1000, // keep in memory for 10 minutes
})

staleTime a gcTime

staleTime określa, KIEDY ponownie pobierać dane (ich aktualność). gcTime określa, KIEDY usunąć dane z pamięci. Typowa zależność to staleTime <= gcTime.

Wskaźniki ponownego pobierania w tle

Gdy React Query ponownie pobiera dane w tle, `isFetching` ma wartość true, mimo że `isLoading` ma wartość false (dane są już zapisane w pamięci podręcznej). Użyj isFetching, aby pokazać subtelny wskaźnik ładowania.
const { data, isLoading, isFetching } = useQuery({ /* ... */ });

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

refetchOnWindowFocus

Domyślnie React Query ponownie pobiera nieaktualne zapytania, gdy użytkownik wraca do karty. Wyłącz tę opcję dla danych, które aktualizują się rzadko.
useQuery({
  queryKey: ['settings'],
  queryFn: fetchSettings,
  refetchOnWindowFocus: false,
})

refetchInterval do odpytywania cyklicznego

Ustaw `refetchInterval`, aby automatycznie odpytywać zapytanie według określonego interwału. Jest to przydatne w panelach wyświetlających dane aktualizowane na bieżąco.
useQuery({
  queryKey: ['liveStats'],
  queryFn: fetchStats,
  refetchInterval: 5000, // every 5 seconds
})

Dane zastępcze

Użyj `placeholderData`, aby wyświetlać poprzednie dane podczas ponownego pobierania i zapobiegać przesuwaniu układu. Opcja keepPreviousData ułatwia obsługę paginacji.
import { keepPreviousData } from '@tanstack/react-query';

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

Szybkie sprawdzenie

Jaki efekt daje ustawienie staleTime: Infinity dla zapytania?

Podsumowanie

staleTime kontroluje aktualność — określa, po jakim czasie dane wywołują ponowne pobieranie w tle. gcTime kontroluje pamięć — określa, jak długo nieużywane dane pozostają w pamięci podręcznej. isFetching sygnalizuje ponowne pobieranie w tle. Użyj placeholderData, aby zapewnić płynną paginację.

Następny temat

Następna lekcja: **Mutations with useMutation** — będą Państwo wysyłać dane do API i unieważniać zapytania po pomyślnym wykonaniu operacji.

Często zadawane pytania

Czy lekcja „Buforowanie, czas nieaktualności i odświeżanie w tle” jest bezpłatna?

Tak — pełny tekst „Buforowanie, czas nieaktualności i odświeżanie w tle” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Buforowanie, czas nieaktualności i odświeżanie w tle”?

Konfigurowanie staleTime i gcTime w celu kontrolowania, kiedy dane są ponownie pobierane z serwera. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Buforowanie, czas nieaktualności i odświeżanie w tle”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja React Query i QueryClient
  2. Buforowanie, czas nieaktualności i odświeżanie w tle
  3. Mutacje z useMutation
  4. Nieskończone przewijanie i paginacja z useInfiniteQuery
← Powrót do React Academy