0Pricing
React Academy · Aula

VariableSizeList: Alturas Dinâmicas de Linhas

Lide com itens de diferentes alturas usando VariableSizeList e o padrão de callback itemSize.

VariableSizeList: Alturas Dinâmicas de Linhas é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Quando os itens têm alturas diferentes

Às vezes as linhas não são uniformes: uma lista de conversa combina mensagens curtas e longas, ou um feed tem cartões com conteúdos variados. FixedSizeList não consegue lidar com isso porque pressupõe um único itemSize constante.

Para esses casos, react-window oferece um tipo de lista que permite que cada item declare seu próprio tamanho.

VariableSizeList substitui FixedSizeList

VariableSizeList funciona como FixedSizeList, mas aceita um tamanho específico para cada item. Em vez disso, importe VariableSizeList e forneça uma função que retorne o tamanho para qualquer index informado.

Todo o restante, incluindo a função de renderização children e a propriedade style essencial, permanece igual, portanto a migração é pequena.

itemSize como função

Com VariableSizeList, itemSize é uma função que recebe um index e retorna a altura daquela linha em pixels. react-window a chama para calcular os deslocamentos e decidir a janela visível.

Isso permite codificar alturas conhecidas, por exemplo, linhas mais altas para itens com imagens e linhas mais baixas para texto simples.

Pré-calcular ou medir

Se você souber antecipadamente a altura de cada linha, poderá retorná-la diretamente da função itemSize. Se as alturas dependerem do conteúdo renderizado, será necessário medir as linhas depois que forem desenhadas.

Alturas pré-calculadas são mais simples e rápidas; alturas medidas são mais flexíveis, mas exigem trabalho adicional para devolver os tamanhos à lista.

resetAfterIndex após a medição

VariableSizeList armazena em cache os deslocamentos dos itens para melhorar o desempenho. Quando uma altura medida muda, você precisa chamar o método resetAfterIndex na ref da lista para que ela recalcule as posições a partir daquele index.

Esquecer disso deixa os deslocamentos desatualizados e as linhas desalinhadas, portanto resetAfterIndex é essencial para fazer a medição dinâmica funcionar.

O dilema da altura

Existe um problema de ovo e galinha: você precisa de uma altura para renderizar a linha, mas só conhece a altura real depois que ela é renderizada. A lista precisa posicionar a linha antes de poder medi-la.

Para resolver isso, renderize primeiro usando uma estimativa e corrija a posição assim que a altura verdadeira for conhecida.

Estimar, renderizar, medir e atualizar

O padrão usual consiste em renderizar as linhas com uma altura estimada, medir a altura real depois da renderização usando uma ref ou ResizeObserver, armazenar o valor medido e chamar resetAfterIndex para atualizar as posições.

Esse ciclo converge rapidamente, de modo que a lista se estabelece com os deslocamentos corretos após a primeira passagem de medição.

getItemSize deve ser estável

A função itemSize deve permanecer estável entre as renderizações, normalmente sendo envolvida em useCallback, para que a lista não invalide constantemente seus deslocamentos armazenados em cache.

Uma função instável definida diretamente no código pode forçar recálculos desnecessários, prejudicando o desempenho que a virtualização pretende oferecer.

O compromisso de desempenho

VariableSizeList realiza mais trabalho do que FixedSizeList porque não pode presumir um deslocamento constante e precisa acompanhar os tamanhos de cada item. Quando as alturas são medidas, essa medição adicional também tem um custo.

Para listas cujas linhas realmente variam, esse custo vale a pena; para linhas uniformes, FixedSizeList continua sendo a opção mais rápida e simples.

Recorrendo à variante fixa com aproximação

Se a medição dinâmica exata for muito custosa, às vezes você pode fazer uma aproximação. Agrupar as linhas em algumas classes de altura fixa ou usar uma média razoável pode permitir que você continue usando FixedSizeList.

Isso troca um layout com precisão de pixels por simplicidade e velocidade, um compromisso aceitável quando pequenas imperfeições nos deslocamentos são toleráveis.

Verificação rápida: itemSize da VariableSizeList

Relembre como VariableSizeList descobre a altura de cada linha.

Recapitulação: VariableSizeList

VariableSizeList lida com linhas de alturas diferentes recebendo itemSize como uma função do índice. As alturas podem ser pré-calculadas ou medidas; alturas medidas exigem o ciclo de estimar, renderizar, medir e atualizar com resetAfterIndex.

Mantenha a função itemSize estável com useCallback. Ela custa mais do que FixedSizeList; portanto, para linhas uniformes ou quando uma aproximação for suficiente, prefira a variante fixa.

Perguntas Frequentes

A aula “VariableSizeList: Alturas Dinâmicas de Linhas” é grátis?

Sim — o texto completo de “VariableSizeList: Alturas Dinâmicas de Linhas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “VariableSizeList: Alturas Dinâmicas de Linhas”?

Lide com itens de diferentes alturas usando VariableSizeList e o padrão de callback itemSize. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “VariableSizeList: Alturas Dinâmicas de Linhas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O Problema da Renderização de Listas Grandes
  2. FixedSizeList: Renderizando Milhares de Itens
  3. VariableSizeList: Alturas Dinâmicas de Linhas
  4. Combinando Virtualização com Busca de Dados
← Voltar para React Academy