Ir para o conteúdo

Virtual scroll

Lista virtualizada — 10 mil linhas, ~25 nós DOM.

Navegadores
Chrome 123+Firefox 121+Safari 17.5+
Nível
2
Tamanho compactado
4.16 kB
Limite de layout forçado
0 ms
Limite do axe
0
Compatível com SSR
Sim
Contrato publicado
Ambiente de teste

Experimentar

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.

User 1
Admin
User 2
Viewer
User 3
Editor
User 4
Admin
User 5
Editor
User 6
Viewer
User 7
Admin
User 8
Viewer
User 9
Editor
User 10
Admin
User 11
Editor
User 12
Viewer
User 13
Admin
User 14
Viewer
User 15
Editor
User 16
Admin
User 17
Editor
User 18
Viewer

Horizontal

The same users as a horizontal strip with orientation="horizontal". rowHeight sets each card's width; the window follows the viewport width.

User 1
Admin
User 2
Viewer
User 3
Editor
User 4
Admin
User 5
Editor
User 6
Viewer
User 7
Admin
User 8
Viewer
User 9
Editor
User 10
Admin
User 11
Editor
User 12
Viewer

API

VirtualScroll

PropTipoPadrãoDescrição
items*T[]—A lista completa de itens, cada um com id estável; apenas as linhas no intervalo atual são renderizadas.
renderRow*(item: T, index: number) => ReactNode—Renderiza o conteúdo de uma linha a partir do item e do índice absoluto.
heightnumber—Altura explícita em pixels. Omita e passe style={{ blockSize: '100%' }} para preencher uma altura definida no pai; o padrão é 600px quando nenhum dos dois é fornecido.
rowHeightnumber64Tamanho fixo em pixels de cada linha no eixo de rolagem (altura na vertical, largura na horizontal), usado para calcular o tamanho da rolagem e as linhas visíveis.
orientation"vertical" | "horizontal""vertical"Eixo de rolagem. Listas horizontais rolam no eixo inline, dimensionam a janela pela largura medida da área visível, espelham corretamente em layouts da direita para a esquerda e refletem o valor em data-orientation.
overscannumber5Número de linhas extras renderizadas acima e abaixo do intervalo visível para que a rolagem rápida não revele espaços vazios.
estimateRowHeight(index: number) => number—Estimativa de altura por índice que muda a lista para layout dinâmico, no qual as linhas renderizadas são medidas e a estimativa é corrigida.
role"list" | "grid""list"Papel ARIA aplicado ao contêiner de rolagem.
anchor"start" | "end""start"Extremidade da lista à qual a posição de rolagem fica fixada quando itens são adicionados ou removidos.
followAppendboolean | "smooth"falseRola para os itens recém-adicionados quando a lista já está no fim, opcionalmente com rolagem suave.
scrollRefRef<VirtualScrollHandle>—Recebe a referência imperativa que expõe scrollToIndex, scrollToOffset e scrollToEnd.
onRangeChange(range: VirtualScrollRangeChange) => void—Chamado com os intervalos de índices visíveis e pré-renderizados sempre que a janela renderizada se move.
onScrollStateChange(state: VirtualScrollScrollState) => void—Chamado quando a rolagem começa e quando termina.
isScrollingResetDelaynumber150Milissegundos sem movimento para considerar a rolagem concluída em navegadores sem o evento scrollend.
classNamestring—Classe aplicada ao contêiner de rolagem.
testIdstring—Valor do atributo data-testid do contêiner de rolagem.

Teclado

TeclaAção
ScrollRoda do mouse, trackpad ou barra de rolagem movem a janela
TabMova o foco entre controles das linhas (checkbox, acionador de menu)
Arrow keysPercorra os itens de um menu suspenso aberto
EscapeFeche um menu suspenso aberto

Acessibilidade

Um espaçador de altura total mantém a barra de rolagem nativa precisa enquanto apenas um conjunto fixo de espaços de linha, mais a margem de pré-renderização, fica montado; chaves estáveis desses espaços reciclam os nós DOM. As linhas expõem role="listitem" com aria-posinset e aria-setsize em uma área de rolagem role="list". A sincronização da rolagem é passiva, e saltos grandes, como pela barra de rolagem, Home/End ou Cmd+Arrow, atualizam o intervalo de forma síncrona.

Pontos de integração de estilos

data-uiify-virtual-scrolldata-part="spacer"data-part="row"
Esta página foi traduzida automaticamente e ainda não foi revisada.