Virtual scroll
⟦Wíñdówéd líšt — 10k rówš, ~25 DÓM ñódéš.~~~~~~~~~~~~~~⟧
- ⟦Brówšérš~~~⟧
- Chrome 123+Firefox 121+Safari 17.5+
- ⟦Tíér~~⟧
- 2
- ⟦Búñdlé çómpréššéd~~~~~~⟧
- 4.16 kB
- ⟦Fórçéd láýóút búdgét~~~~~~~⟧
- 0 ms
- ⟦Áxé búdgét~~~~⟧
- 0
- ⟦ŠŠR çómpátíblé~~~~~⟧
- ⟦Ýéš~~⟧
- ⟦Públíšhéd çóñtráçt~~~~~~~⟧
- ⟦Téšt hárñéšš~~~~~⟧
⟦Pláýgróúñd~~~~⟧
Virtual scroll
10,000 team members with checkbox, avatar, and dropdown actions. Only visible rows (+ buffer) mount in the DOM — open DevTools and count [data-uiify-virtual-scroll] [data-part="row"] nodes while scrolling.
Horizontal
The same users as a horizontal strip with orientation="horizontal". rowHeight sets each card's width; the window follows the viewport width.
⟦ÁPÍ~~⟧
VirtualScroll
| ⟦Próp~~⟧ | ⟦Týpé~~⟧ | ⟦Défáúlt~~~⟧ | ⟦Déšçríptíóñ~~~~⟧ |
|---|---|---|---|
items* | T[] | — | ⟦Thé fúll líšt óf ítémš, éáçh wíth á štáblé íd; óñlý thé rówš íñ thé çúrréñt ráñgé áré réñdéréd.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
renderRow* | (item: T, index: number) => ReactNode | — | ⟦Réñdérš thé çóñtéñtš óf óñé rów fróm ítš ítém áñd ábšólúté íñdéx.~~~~~~~~~~~~~~~~~~~~~~~⟧ |
height | number | — | ⟦Éxplíçít héíght íñ píxélš. Ómít ít áñd pášš štýlé={{ blockSize: '100%' }} tó fíll á défíñíté páréñt héíght; 600px íš thé défáúlt whéñ ñéíthér íš šúpplíéd.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
rowHeight | number | 64 | ⟦Fíxéd píxél šížé óf éáçh rów óñ thé šçróll áxíš (héíght whéñ vértíçál, wídth whéñ hórížóñtál), úšéd tó çómpúté šçróll šížé áñd víšíblé rówš.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
orientation | "vertical" | "horizontal" | "vertical" | ⟦Šçróll áxíš. Hórížóñtál líštš šçróll óñ thé íñlíñé áxíš, šížé thé wíñdów fróm thé méášúréd víéwpórt wídth, mírrór çórréçtlý íñ ríght-tó-léft láýóútš, áñd mírrór thé válúé tó dátá-óríéñtátíóñ.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
overscan | number | 5 | ⟦Ñúmbér óf éxtrá rówš réñdéréd ábóvé áñd bélów thé víšíblé ráñgé šó fášt šçróllíñg dóéš ñót révéál bláñk špáçé.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
estimateRowHeight | (index: number) => number | — | ⟦Pér-íñdéx héíght éštímáté thát šwítçhéš thé líšt tó dýñámíç láýóút, whéré réñdéréd rówš áré méášúréd áñd thé éštímáté íš çórréçtéd.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
role | "list" | "grid" | "list" | ⟦ÁRÍÁ rólé ápplíéd tó thé šçróll çóñtáíñér.~~~~~~~~~~~~~~~⟧ |
anchor | "start" | "end" | "start" | ⟦Whíçh éñd óf thé líšt thé šçróll póšítíóñ štáýš píññéd tó whéñ ítémš áré áddéd ór rémóvéd.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
followAppend | boolean | "smooth" | false | ⟦Šçróllš tó ñéwlý áppéñdéd ítémš whéñ thé líšt íš álréádý át thé éñd, óptíóñállý wíth šmóóth šçróllíñg.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
scrollRef | Ref<VirtualScrollHandle> | — | ⟦Réçéívéš thé ímpérátívé háñdlé éxpóšíñg šçróllTóÍñdéx, šçróllTóÓffšét áñd šçróllTóÉñd.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
onRangeChange | (range: VirtualScrollRangeChange) => void | — | ⟦Çálléd wíth thé víšíblé áñd óvéršçáññéd íñdéx ráñgéš whéñévér thé réñdéréd wíñdów móvéš.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
onScrollStateChange | (state: VirtualScrollScrollState) => void | — | ⟦Çálléd whéñ šçróllíñg štártš áñd whéñ ít šéttléš.~~~~~~~~~~~~~~~~~~⟧ |
isScrollingResetDelay | number | 150 | ⟦Míllíšéçóñdš óf qúíét béfóré šçróllíñg íš tréátéd áš šéttléd íñ brówšérš wíthóút thé šçrólléñd évéñt.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧ |
className | string | — | ⟦Çlášš ápplíéd tó thé šçróll çóñtáíñér.~~~~~~~~~~~~~~⟧ |
testId | string | — | ⟦Válúé fór thé šçróll çóñtáíñér'š dátá-téštíd áttríbúté.~~~~~~~~~~~~~~~~~~~~⟧ |
⟦Kéýbóárd~~~⟧
| ⟦Kéý~~⟧ | ⟦Áçtíóñ~~~⟧ |
|---|---|
| Scroll | ⟦Whéél, tráçkpád, ór šçróllbár móvéš thé wíñdów~~~~~~~~~~~~~~~~~⟧ |
| Tab | ⟦Móvé fóçúš bétwééñ rów çóñtrólš (çhéçkbóx, méñú tríggér)~~~~~~~~~~~~~~~~~~~~⟧ |
| Arrow keys | ⟦Róvé ítémš íñšídé áñ ópéñ drópdówñ méñú~~~~~~~~~~~~~~⟧ |
| Escape | ⟦Çlóšé áñ ópéñ drópdówñ méñú~~~~~~~~~~⟧ |
⟦Áççéššíbílítý~~~~~⟧
⟦Á fúll-héíght špáçér kéépš thé ñátívé šçróllbár áççúráté whílé óñlý á fíxéd póól óf rów šlótš, plúš óvéršçáñ, íš móúñtéd; štáblé šlót kéýš réçýçlé DÓM ñódéš. Rówš éxpóšé rólé="líštítém" wíth áríá-póšíñšét áñd áríá-šétšížé íñšídé á rólé="líšt" šçróllpórt. Šçróll šýñç íš páššívé, áñd lárgé júmpš šúçh áš thé šçróllbár, Hómé/Éñd ór Çmd+Árrów úpdáté thé ráñgé šýñçhróñóúšlý.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~⟧
⟦Štýlíñg hóókš~~~~~⟧
data-uiify-virtual-scrolldata-part="spacer"data-part="row"