Łą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
- Problem renderowania dużych list
- FixedSizeList: renderowanie tysięcy elementów
- VariableSizeList: dynamiczne wysokości wierszy
- Łączenie wirtualizacji z pobieraniem danych