Listas lentas no React Native: FlatList, FlashList e memorização na prática
A lista do seu app engasga ao rolar e fica em branco quando o usuário desce rápido? Veja as causas mais comuns e as correções que devolvem a fluidez.
Por Equipe We Codex3 min de leitura
Lista é a tela mais comum de qualquer app: produtos, pedidos, mensagens, veículos. E é onde a falta de fluidez mais aparece — travadas ao rolar, espaços em branco quando o dedo desce rápido, aquecimento do celular. Na maioria das vezes, a causa é conhecida.
Nunca use ScrollView com map para listas longas
O ScrollView renderiza todos os itens de uma vez. Com 500 produtos, são 500 componentes na memória. Listas virtualizadas (FlatList ou FlashList) renderizam apenas o que está na tela e um pouco ao redor.
FlatList bem configurada
<FlatList
data={itens}
keyExtractor={(i) => i.id}
renderItem={renderItem}
initialNumToRender={8}
windowSize={7}
removeClippedSubviews
/>keyExtractorestável — nunca use o índice.renderItemdefinido fora do render ou comuseCallback.- Item com altura fixa? Informe com
getItemLayoute elimine cálculos.
Memorize o item
Se cada item re-renderiza quando qualquer coisa muda na tela, a rolagem engasga. Componentes de item com React.memo e props estáveis cortam esse trabalho.
Imagens: o vilão escondido
Fotos em resolução original, sem cache, decodificadas durante a rolagem. Redimensione no servidor e use uma biblioteca de imagem com cache — detalhes em Imagens pesadas no app: cache, tamanhos e formatos.
FlashList para listas grandes
A FlashList recicla componentes em vez de criar novos, e costuma ser bem mais fluida em listas longas e heterogêneas.
Como medir
Ative o monitor de performance do React Native e observe os quadros por segundo da thread de JavaScript e da interface enquanto rola. Teste num Android intermediário, não no seu iPhone — o porquê está em Testar em dispositivos reais: por que o emulador engana.
Lista fluida combina com carregamento bem feito: veja Skeleton e shimmer no React Native: carregamento que parece rápido e, para o quadro completo de performance, Como otimizar a performance de aplicações React e React Native para passar no Core Web Vitals.
Foi esse cuidado que aplicamos no app do Kharbox. Conheça a frente de aplicativos ou fale com a gente.
- React Native
- Performance
- FlatList
- FlashList
Resolver de vez, com quem faz isso todo dia
Tem um app em mente ou um app que precisa ficar mais rápido?
Este artigo mostra o caminho. A implementação sob medida — o detalhe que muda o resultado no seu caso — é o trabalho da We Codex, empresa de engenharia do grupo Wocom.
Continue lendo
Tudo sobre Mobile- Ler artigo
Mobile3 min
Imagens pesadas no app: cache, tamanhos e formatos
Fotos em resolução original, sem cache e decodificadas durante a rolagem. Imagens são uma das principais causas de lentidão e consumo de dados em apps.
- Ler artigo
Web & Performance3 min
Como otimizar a performance de aplicações React e React Native para passar no Core Web Vitals
LCP, INP e CLS no vermelho mesmo com React moderno? Veja onde a performance realmente se perde e o que ajustar primeiro, na web e no app.
- Ler artigo
Mobile3 min
Skeleton e shimmer no React Native: carregamento que parece rápido
Spinner girando no meio da tela do app enquanto a lista carrega? Skeletons com shimmer fazem o app parecer mais rápido. Como implementar no React Native.