0Pricing
React Academy · Lekcja

VariableSizeList: dynamiczne wysokości wierszy

Proszę obsługiwać elementy o różnych wysokościach za pomocą VariableSizeList i wzorca callbacku itemSize.

VariableSizeList: dynamiczne wysokości wierszy to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 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.

Gdy elementy mają różne wysokości

Czasami wiersze nie są jednakowe: lista czatu zawiera krótkie i długie wiadomości albo strumień danych ma karty o różnej zawartości. FixedSizeList nie może sobie z tym poradzić, ponieważ zakłada jedną stałą wartość itemSize.

W takich przypadkach react-window oferuje typ listy, który pozwala każdemu elementowi określić własny rozmiar.

VariableSizeList zastępuje FixedSizeList

VariableSizeList działa podobnie jak FixedSizeList, ale przyjmuje rozmiar określany osobno dla każdego elementu. Zamiast FixedSizeList importuje się VariableSizeList i przekazuje funkcję zwracającą rozmiar dla dowolnego indeksu.

Cała reszta — funkcja renderująca children oraz kluczowa właściwość style — pozostaje taka sama, dlatego migracja jest niewielka.

itemSize jako funkcja

W przypadku VariableSizeList itemSize jest funkcją, która przyjmuje indeks i zwraca wysokość danego wiersza w pikselach. react-window wywołuje ją, aby obliczyć przesunięcia i określić widoczne okno.

Pozwala to zdefiniować znane wysokości, na przykład wyższe wiersze dla elementów z obrazami i niższe dla zwykłego tekstu.

Wstępne obliczanie a pomiar

Jeśli z góry wiadomo, jaka jest wysokość każdego wiersza, można zwrócić ją bezpośrednio z funkcji itemSize. Jeśli wysokość zależy od wyrenderowanej zawartości, wiersze trzeba zmierzyć po ich narysowaniu.

Wysokości obliczone z góry są najprostsze i najszybsze, natomiast wysokości mierzone są bardziej elastyczne, ale wymagają dodatkowej pracy, aby przekazać rozmiary z powrotem do listy.

resetAfterIndex po pomiarze

VariableSizeList buforuje przesunięcia elementów w celu zwiększenia wydajności. Gdy zmierzona wysokość ulegnie zmianie, należy wywołać metodę resetAfterIndex na ref listy, aby ponownie obliczyć pozycje od tego indeksu wzwyż.

Pominięcie tego kroku pozostawia nieaktualne przesunięcia i powoduje nieprawidłowe wyrównanie wierszy, dlatego resetAfterIndex jest kluczem do działania pomiaru dynamicznego.

Problem kury i jajka

Występuje problem kury i jajka: aby wyrenderować wiersz, potrzebna jest jego wysokość, ale rzeczywistą wysokość można poznać dopiero po jego wyrenderowaniu. Lista musi umieścić wiersz, zanim będzie można go zmierzyć.

Rozwiązanie wymaga najpierw renderowania z wartością szacunkową, a następnie skorygowania jej po poznaniu rzeczywistej wysokości.

Oszacuj, wyrenderuj, zmierz, zaktualizuj

Standardowy wzorzec polega na renderowaniu wierszy z szacowaną wysokością, zmierzeniu ich rzeczywistej wysokości po narysowaniu za pomocą ref lub ResizeObserver, zapisaniu zmierzonej wartości i wywołaniu resetAfterIndex w celu zaktualizowania pozycji.

Pętla ta szybko zbiega, więc po pierwszym przejściu pomiarowym lista ustala prawidłowe przesunięcia.

itemSize musi być stabilna

Funkcja itemSize powinna zachowywać stabilność między renderowaniami. Zwykle opakowuje się ją w useCallback, aby lista nie unieważniała ciągle buforowanych przesunięć.

Niestabilna funkcja zdefiniowana bezpośrednio w kodzie może wymuszać zbędne ponowne obliczenia, pogarszając wydajność, którą wirtualizacja ma zapewniać.

Kompromis wydajnościowy

VariableSizeList wykonuje więcej pracy niż FixedSizeList, ponieważ nie może założyć stałego przesunięcia i musi śledzić rozmiary poszczególnych elementów. Gdy wysokości są mierzone, dodatkowy pomiar również zwiększa koszt.

W przypadku list, których wiersze rzeczywiście mają różne wysokości, ten koszt się opłaca; dla jednolitych wierszy FixedSizeList pozostaje szybszym i prostszym wyborem.

Powrót do wariantu stałego z użyciem przybliżenia

Jeśli dokładny pomiar dynamiczny jest zbyt kosztowny, czasami można zastosować przybliżenie. Podział wierszy na kilka klas o stałej wysokości albo użycie rozsądnej wartości średniej może pozwolić na pozostanie przy FixedSizeList.

To kompromis między układem idealnie zgodnym co do piksela a prostotą i szybkością — akceptowalny, gdy niewielkie niedokładności przesunięcia są tolerowane.

Szybki test: itemSize w VariableSizeList

Przypomnij sobie, jak VariableSizeList poznaje wysokość każdego wiersza.

Podsumowanie: VariableSizeList

VariableSizeList obsługuje wiersze o różnych wysokościach, przyjmując itemSize jako funkcję indeksu. Wysokości można obliczyć wcześniej albo zmierzyć; zmierzone wysokości wymagają pętli szacowanie–renderowanie–pomiar–aktualizacja z użyciem resetAfterIndex.

Należy utrzymywać stabilność funkcji itemSize za pomocą useCallback. Kosztuje ona więcej niż FixedSizeList, dlatego w przypadku jednolitych wierszy lub gdy wystarczy przybliżenie należy wybrać wariant stały.

Często zadawane pytania

Czy lekcja „VariableSizeList: dynamiczne wysokości wierszy” jest bezpłatna?

Tak — pełny tekst „VariableSizeList: dynamiczne wysokości wierszy” 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 „VariableSizeList: dynamiczne wysokości wierszy”?

Proszę obsługiwać elementy o różnych wysokościach za pomocą VariableSizeList i wzorca callbacku itemSize. Ć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 3 z 4.

Ile czasu zajmuje lekcja „VariableSizeList: dynamiczne wysokości wierszy”?

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