VariableSizeList: Dynamiske radhøyder
Håndter elementer med ulik høyde ved hjelp av VariableSizeList og mønsteret med itemSize-callback.
VariableSizeList: Dynamiske radhøyder er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.
Når elementene har ulik høyde
Noen ganger har radene ulik størrelse: En chatliste kan blande korte og lange meldinger, eller en feed kan ha kort med varierende innhold. FixedSizeList kan ikke håndtere dette fordi den antar én konstant itemSize.
I slike tilfeller tilbyr react-window en listetype som lar hvert element oppgi sin egen størrelse.
VariableSizeList erstatter FixedSizeList
VariableSizeList fungerer som FixedSizeList, men godtar en størrelse per element. De importerer den i stedet og oppgir en funksjon som returnerer størrelsen for en gitt index.
Alt annet, både children-render-funksjonen og den kritiske style-propen, forblir likt, så overgangen er liten.
itemSize som funksjon
Med VariableSizeList er itemSize en funksjon som tar en index og returnerer høyden på raden i piksler. react-window kaller den for å beregne forskyvninger og avgjøre det synlige vinduet.
Dette lar Dem angi kjente høyder, for eksempel høyere rader for elementer med bilder og kortere rader for ren tekst.
Forhåndsberegning kontra måling
Hvis De kjenner høyden på hver rad på forhånd, kan De returnere den direkte fra itemSize-funksjonen. Hvis høydene avhenger av det renderte innholdet, må De måle radene etter at de er tegnet.
Forhåndsberegnede høyder er enklest og raskest. Målte høyder er mer fleksible, men krever ekstra arbeid for å sende størrelsene tilbake til listen.
resetAfterIndex etter måling
VariableSizeList mellomlagrer elementforskyvninger for bedre ytelse. Når en målt høyde endres, må De kalle resetAfterIndex-metoden på ref-en til listen, slik at den beregner posisjonene på nytt fra og med denne index-en.
Hvis De glemmer dette, blir forskyvningene utdaterte og radene feiljustert. resetAfterIndex er derfor nøkkelen til å få dynamisk måling til å fungere.
Høydeparadokset
Her oppstår et høna-og-egget-problem: De trenger en høyde for å rendre raden, men kjenner først den faktiske høyden etter at raden er rendret. Listen må plassere raden før den kan måle den.
Dette løses ved å rendre med et estimat først, og deretter korrigere når den faktiske høyden er kjent.
Estimer, render, mål, oppdater
Det vanlige mønsteret er å rendre rader med en estimert høyde, måle den faktiske høyden etter rendering ved hjelp av en ref eller ResizeObserver, lagre den målte verdien og kalle resetAfterIndex for å oppdatere posisjonene.
Denne løkken konvergerer raskt, slik at listen finner riktige forskyvninger etter den første målerunden.
getItemSize må være stabil
itemSize-funksjonen bør være stabil mellom renderingene, vanligvis pakket inn i useCallback, slik at listen ikke hele tiden ugyldiggjør de mellomlagrede forskyvningene.
En ustabil funksjon som defineres inline, kan tvinge frem unødvendige beregninger på nytt og svekke ytelsen som virtualiseringen skulle gi.
Ytelsesavveiningen
VariableSizeList gjør mer arbeid enn FixedSizeList fordi den ikke kan anta et konstant offset og må holde oversikt over størrelsen på hvert element. Når høydene måles, medfører den ekstra målingen også en kostnad.
For lister der radene faktisk varierer, er denne kostnaden verdt det. For ensartede rader er FixedSizeList fortsatt det raskere og enklere valget.
Tilbake til Fixed med tilnærming
Hvis nøyaktig dynamisk måling blir for kostbar, kan du noen ganger bruke en tilnærming. Ved å dele radene inn i noen få faste høydeklasser eller bruke et fornuftig gjennomsnitt kan du fortsette å bruke FixedSizeList.
Dette bytter pikselperfekt layout mot enkelhet og hastighet, og er et akseptabelt kompromiss når små unøyaktigheter i offset kan tolereres.
Hurtigsjekk: VariableSizeList itemSize
Husk hvordan VariableSizeList finner høyden på hver rad.
Oppsummering: VariableSizeList
VariableSizeList håndterer rader med ulik høyde ved å ta itemSize som en funksjon av indeksen. Høydene kan beregnes på forhånd eller måles. Målte høyder krever sløyfen estimer–render–mål–oppdater med resetAfterIndex.
Hold itemSize-funksjonen stabil med useCallback. Den koster mer enn FixedSizeList, så for ensartede rader, eller når en tilnærming er tilstrekkelig, bør du foretrekke den faste varianten.
Lær deg React med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 88
- Leksjoner
- 324
Ofte stilte spørsmål
Er leksjonen «VariableSizeList: Dynamiske radhøyder» gratis?
Ja – hele teksten i «VariableSizeList: Dynamiske radhøyder» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «VariableSizeList: Dynamiske radhøyder»?
Håndter elementer med ulik høyde ved hjelp av VariableSizeList og mønsteret med itemSize-callback. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med React Academy?
Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «VariableSizeList: Dynamiske radhøyder»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?
Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Problemet med gjengivelse av store lister
- FixedSizeList: Gjengi tusenvis av elementer
- VariableSizeList: Dynamiske radhøyder
- Kombiner virtualisering med henting av data