0Pricing
React Academy · Lekcja

Łączenie wirtualizacji z pobieraniem danych

Proszę zaimplementować nieskończone przewijanie, uruchamiając pobieranie danych po dotarciu zwirtualizowanej listy do końca.

Łączenie wirtualizacji z pobieraniem danych 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.

Wzorzec nieskończonego przewijania

Nieskończone przewijanie ładuje więcej danych, gdy użytkownik zbliża się do końca listy, zamiast korzystać z paginacji za pomocą jawnych przycisków stron. W połączeniu z wirtualizacją umożliwia płynne przeglądanie ogromnych zbiorów danych.

Lista wyświetla tylko widoczne wiersze, a nowe dane są pobierane w tle tuż przed dotarciem użytkownika do dołu.

Wywołanie zwrotne onItemsRendered

Komponenty listy react-window przyjmują wywołanie zwrotne onItemsRendered, które informuje, jakie indeksy elementów są obecnie renderowane. Udostępnia ono początkowe i końcowe indeksy widocznego obszaru oraz obszaru overscanu.

To wywołanie zwrotne jest punktem podłączenia do przewijania. Umożliwia określenie, jak daleko użytkownik przewinął listę, bez podłączania surowych zdarzeń przewijania.

Wykrywanie overscanStopIndex w pobliżu itemCount

Aby wiedzieć, kiedy pobrać dane, należy porównać overscanStopIndex z onItemsRendered z bieżącą wartością itemCount. Gdy renderowane okno zbliża się do końca załadowanych danych, potrzebne są kolejne dane.

Użycie indeksu końca overscanu zapewnia niewielki zapas czasu i uruchamia pobieranie nieco wcześniej, zanim użytkownik rzeczywiście dotrze do ostatniego wiersza.

Uruchamianie pobierania w pobliżu końca

Gdy indeks końcowy przekroczy próg, na przykład znajdzie się w odległości nie większej niż jeden ekran od itemCount, należy wywołać funkcję pobierającą dane dla następnej strony. Trzeba ją zabezpieczyć, aby nie uruchamiać wielu nakładających się żądań.

Flaga ładowania lub sprawdzenie, czy pobieranie już trwa, zapobiega zduplikowanym żądaniom podczas przewijania przez obszar wyzwalania.

Wskaźnik ładowania jako ostatni element

Praktycznym rozwiązaniem jest ustawienie itemCount na liczbę załadowanych elementów powiększoną o jeden, dopóki istnieją jeszcze dane. Dodatkowy wiersz wyświetla spinner, sygnalizując, że trwa pobieranie.

Po nadejściu nowych danych licznik rośnie, a wiersz ze spinnerem zostaje zastąpiony rzeczywistą zawartością, zapewniając płynną informację wizualną.

react-window-infinite-loader

Towarzyszący pakiet react-window-infinite-loader przejmuje tę logikę. Należy przekazać mu isItemLoaded, loadMoreItems i itemCount, a będzie wywoływać funkcję ładującą, gdy użytkownik przewija w kierunku niezaładowanych wierszy.

Pakiet obsługuje śledzenie załadowanych zakresów i zapobiega redundantnym wywołaniom ładowania, upraszczając niezawodne nieskończone przewijanie.

Wiersze zastępcze podczas pobierania

Dla niezaładowanych indeksów można renderować wiersze zastępcze lub szkieletowe zamiast pustych miejsc. Funkcja renderująca sprawdza, czy element o danym indeksie został załadowany, i jeśli nie, wyświetla szkielet.

Szkielety zachowują układ i informują o postępie, dzięki czemu oczekiwanie na następną stronę jest przyjemniejsze niż oglądanie pustej przestrzeni.

Wiersze błędów i ponawiania

Pobieranie może się nie powieść, dlatego należy obsługiwać błędy w elegancki sposób. Na końcu można wyświetlić specjalny wiersz błędu z przyciskiem ponowienia, który ponownie wywołuje funkcję ładowania dla nieudanego zakresu.

Dzięki temu lista pozostaje użyteczna po chwilowym problemie, a użytkownik otrzymuje jasny sposób na odzyskanie działania bez ponownego ładowania całej strony.

Paginacja kursorowa a offsetowa

Dwa popularne style paginacji dostarczają dane do nieskończonych list. Paginacja offsetowa wysyła żądania na podstawie numeru strony lub liczby pomijanych elementów, natomiast paginacja kursorowa żąda elementów znajdujących się za nieprzezroczystym kursorem wskazującym ostatnio wyświetlony element.

Paginacja kursorowa jest zazwyczaj bardziej niezawodna w przypadku aktualizowanych na bieżąco danych, ponieważ unika przesunięć i duplikatów, które paginacja offsetowa może powodować po wstawieniu nowych elementów.

Połączenie z React Query useInfiniteQuery

React Query useInfiniteQuery naturalnie współpracuje z wirtualizacją. Zarządza pobranymi stronami, następnym kursorem oraz stanami ładowania i błędu, podczas gdy react-window wydajnie renderuje spłaszczone strony.

Strony należy spłaszczyć do jednej tablicy na potrzeby listy, a następnie wywołać fetchNextPage po osiągnięciu progu w onItemsRendered, zyskując bez dodatkowej pracy buforowanie i ponawianie prób.

Szybki test: warunek uruchomienia nieskończonego przewijania

Określ, kiedy należy pobrać więcej danych w zwirtualizowanej nieskończonej liście.

Podsumowanie: wirtualizacja z pobieraniem danych

Nieskończone przewijanie ładuje strony, gdy użytkownik zbliża się do końca. onItemsRendered zgłasza indeksy, a porównanie overscanStopIndex z itemCount wskazuje, kiedy należy pobrać dane, z zabezpieczeniem przed zduplikowanymi żądaniami.

Należy używać wierszy zastępczych i błędów, pakietu react-window-infinite-loader do śledzenia stanu oraz paginacji kursorowej dla aktualizowanych na bieżąco danych. React Query useInfiniteQuery zarządza stronami, kursorami i stanami, a react-window zajmuje się renderowaniem.

Często zadawane pytania

Czy lekcja „Łączenie wirtualizacji z pobieraniem danych” jest bezpłatna?

Tak — pełny tekst „Łączenie wirtualizacji z pobieraniem danych” 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 „Łączenie wirtualizacji z pobieraniem danych”?

Proszę zaimplementować nieskończone przewijanie, uruchamiając pobieranie danych po dotarciu zwirtualizowanej listy do końca. Ć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 „Łączenie wirtualizacji z pobieraniem danych”?

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. Problem renderowania dużych list
  2. FixedSizeList: renderowanie tysięcy elementów
  3. VariableSizeList: dynamiczne wysokości wierszy
  4. Łączenie wirtualizacji z pobieraniem danych
← Powrót do React Academy