0Pricing
React Academy · Lekcja

Suspense dla granic danych i kodu

Połączenie Suspense z leniwym ładowaniem i przyszłymi bibliotekami danych w celu uzyskania przejrzystych stanów ładowania.

Suspense dla granic danych i kodu to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 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 użyją Państwo React Suspense wraz z React.lazy do dzielenia kodu oraz z bibliotekami danych, aby wyświetlać zastępczy interfejs podczas ładowania treści.

Czym jest Suspense?

Suspense to komponent React, który przechwytuje komponenty w swoim poddrzewie będące w stanie „suspended”, czyli oczekujące na załadowanie, i zamiast nich renderuje zastępczy interfejs.
<Suspense fallback={<Spinner />}>
  <MyComponent />
</Suspense>

Suspense z React.lazy

React.lazy() tworzy komponent ładowany za pomocą dynamicznego importu. Gdy jest używany wewnątrz Suspense, zastępczy interfejs jest renderowany do czasu pobrania pakietu JavaScript.
const HeavyChart = React.lazy(() => import('./HeavyChart'));

<Suspense fallback={<p>Loading chart...</p>}>
  <HeavyChart />
</Suspense>

Wiele leniwie ładowanych komponentów w jednej granicy

Wiele leniwie ładowanych komponentów znajdujących się pod tą samą granicą Suspense współdzieli jeden zastępczy interfejs. React czeka na załadowanie WSZYSTKICH komponentów, zanim wyświetli treść. Niezależne ładowanie wymaga zagnieżdżonych granic.

Zagnieżdżone granice Suspense

Granice Suspense należy zagnieżdżać, aby wyświetlać poszczególne części interfejsu w miarę ich ładowania, zamiast czekać na wszystko. Zewnętrzne granice przechwytują wolniejsze ładowanie, a wewnętrzne obsługują szybsze.
<Suspense fallback={<PageSkeleton />}>
  <Header />
  <Suspense fallback={<ChartSkeleton />}>
    <LazyChart />
  </Suspense>
</Suspense>

Suspense z bibliotekami danych

Biblioteki takie jak React Query (z suspense: true) i Relay wstrzymują komponenty oczekujące na dane, podobnie jak w przypadku leniwego ładowania. Granica Suspense udostępnia zastępczy interfejs ładowania.
const { data } = useQuery({ queryKey: ['users'], queryFn: fetchUsers,
  suspense: true }); // component suspends until data is ready
// No loading check needed — data is always available here

Hook use() w React 19

W React 19 hook `use(promise)` pozwala bezpośrednio odczytywać promise w komponencie. Jeśli promise jest w toku, komponent zostaje wstrzymany, a najbliższa granica Suspense wyświetla swój zastępczy interfejs.
import { use } from 'react';

function Profile({ userPromise }) {
  const user = use(userPromise); // suspends until resolved
  return <p>{user.name}</p>;
}

SuspenseList dla uporządkowanego ujawniania treści

React.SuspenseList (eksperymentalny) koordynuje wiele granic Suspense, aby ujawniały treść w określonej kolejności, na przykład od góry do dołu lub wszystkie jednocześnie — zapobiegając chaotycznemu pojawianiu się elementów interfejsu.

Suspense nie przechwytuje błędów

Suspense obsługuje wyłącznie stany ładowania. Nie przechwytuje błędów wynikających z nieudanych fetchów. Aby obsługiwać zarówno stany ładowania, jak i błędy, należy połączyć Suspense z Error Boundary.
<ErrorBoundary fallback={<Error />}>
  <Suspense fallback={<Spinner />}>
    <DataComponent />
  </Suspense>
</ErrorBoundary>

Ekrany szkieletowe jako zastępczy interfejs

Zamiast wskaźników ładowania należy używać ekranów szkieletowych jako zastępczych interfejsów Suspense. Ekrany szkieletowe to układy zastępcze dopasowane kształtem do treści, które ograniczają przesuwanie układu po pojawieniu się treści.

Szybkie sprawdzenie

Co jest wyświetlane użytkownikom podczas pobierania pakietu komponentu React.lazy()?

Podsumowanie

Suspense opakowuje komponenty ładowane i wyświetla zastępczy interfejs. React.lazy służy do dzielenia kodu, tryby suspense bibliotek danych — do ładowania danych, a zagnieżdżone granice — do niezależnego, stopniowego ujawniania treści. Aby zapewnić pełną obsługę błędów, należy połączyć je z Error Boundary.

Kurs ukończony

Gratulacje! Ukończyli Państwo kurs **Async Patterns in React: Promises & Concurrency**. Potrafią już Państwo obsługiwać warunki wyścigu, używać useTransition i useDeferredValue do tworzenia responsywnych interfejsów oraz wykorzystywać Suspense jako granice ładowania.

Często zadawane pytania

Czy lekcja „Suspense dla granic danych i kodu” jest bezpłatna?

Tak — pełny tekst „Suspense dla granic danych i kodu” 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 „Suspense dla granic danych i kodu”?

Połączenie Suspense z leniwym ładowaniem i przyszłymi bibliotekami danych w celu uzyskania przejrzystych stanów ładowania. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Suspense dla granic danych i kodu”?

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. Warunki wyścigu i czyszczenie efektów
  2. useTransition do nieblokujących aktualizacji interfejsu
  3. useDeferredValue do opóźniania obsługi danych wejściowych
  4. Suspense dla granic danych i kodu
← Powrót do React Academy