Publicado em: 17/03/2025

Au 12 - Mobile - React Native - Estilizando a lista de produtos - Mestres BEGIN


Nesta aula prática, vamos transformar a renderização de uma lista de produtos em React Native, substituindo a abordagem tradicional por FlatList, um componente otimizado para performance e funcionalidades avançadas.

Por que usar FlatList?

O FlatList é o componente ideal para listas em React Native porque:

  • Renderização eficiente: Carrega apenas os itens visíveis na tela
  • Performance: Otimizado para listas grandes
  • Funcionalidades nativas: Rolagem suave, pull-to-refresh, lazy loading
  • Flexibilidade: Cabeçalhos, rodapés e separadores personalizáveis

Implementação Básica

Substituindo o .map() por FlatList:

1import { FlatList } from "react-native";
2<FlatList
3  data={products}
4  renderItem={({ item }) => <ProductItem product={item} />}
5  keyExtractor={item => item.id.toString()}
6  ListHeaderComponent={<ListHeader />}
7/>

Principais props:

  • data: Array de produtos
  • renderItem: Função que renderiza cada item
  • keyExtractor: Identificador único para cada item
  • ListHeaderComponent: Componente de cabeçalho

Estrutura do Componente ProductItem

Cada item da lista deve ser um componente independente:

1const ProductItem = ({ product }) => (
2  <View style={styles.itemContainer}>
3    <Text style={styles.name}>{product.name}</Text>
4    <Text style={styles.stock}>{product.stock}</Text>
5    <Text style={styles.price}>{product.price}</Text>
6    <TouchableOpacity onPress={() => handleDelete(product.id)}>
7      <Icon name="delete" size={20} color="red" />
8    </TouchableOpacity>
9  </View>
10);

Estilização com StyleSheet

Crie um arquivo de estilos separado para melhor organização:

1// ProductList.styles.js
2import { StyleSheet } from "react-native";
3export default StyleSheet.create({
4  container: {
5    flex: 1,
6    padding: 16,
7  },
8  itemContainer: {
9    flexDirection: "row",
10    justifyContent: "space-between",
11    paddingVertical: 12,
12    borderBottomWidth: 1,
13    borderColor: "#eee",
14  },
15  header: {
16    flexDirection: "row",
17    paddingBottom: 8,
18    borderBottomWidth: 2,
19    borderColor: "#333",
20  },
21  name: { width: "40%", fontWeight: "bold" },
22  stock: { width: "30%", textAlign: "center" },
23  price: { width: "20%", textAlign: "right" },
24});

Componente de Cabeçalho

Use ListHeaderComponent para títulos das colunas:

1const ListHeader = () => (
2  <View style={styles.header}>
3    <Text style={styles.name}>Nome</Text>
4    <Text style={styles.stock}>Estoque</Text>
5    <Text style={styles.price}>Preço</Text>
6    <View style={{ width: "10%" }} />
7  </View>
8);

Tratamento de Lista Vazia

Melhore a UX com um componente para lista vazia:

1const EmptyList = () => (
2  <View style={styles.emptyContainer}>
3    <Text>Nenhum produto encontrado</Text>
4  </View>
5);
6// Na FlatList
7<FlatList
8  ...
9  ListEmptyComponent={<EmptyList />}
10/>

Considerações Finais

Com esta implementação você obteve:

  • Performance otimizada com renderização lazy
  • Código organizado com componentes separados
  • Manutenibilidade com estilos em arquivos dedicados
  • Experiência do usuário com tratamento para lista vazia

Próximos passos recomendados:

  1. Implementar pull-to-refresh com refreshControl
  2. Adicionar animações ao scroll
  3. Criar um componente de loading para dados assíncronos
  4. Implementar seleção múltipla de itens
Fernando Cunha
Artigo deFernando Cunha

Com mais de 15 anos de experiência em tecnologia e formado pela FAAP em Administração de empresas, hoje é o CEO da Mestres da Web, empresa referência no mercado nacional e com projeções de expansão internacional.

últimos vídeos

veja nossos vídeos mais recentes e esteja por dentro de muitas novidades.

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN
play

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN

Explorando a estrutura gerada pelo Create React App, entendendo o papel das pastas public e src, os conceitos de Virtual DOM, JSX e componentes, além de como o CSS é aplicado nos projetos React.

Autor deste artigo
Fernando Cunha17/03/2025
Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN
play

Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN

Explorando a criação de um layout fixo para a aplicação React, com barra lateral, barra superior e área dinâmica para conteúdo. Utilizando o React Router Dom v6 para gerenciar navegação entre rotas.

Autor deste artigo
Fernando Cunha17/03/2025
Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN
play

Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN

Abordando técnicas para organizar estilos em React, utilizando seletores CSS, CSS Modules, integração com React Router, reset CSS eficiente e boas práticas para garantir consistência visual e manutenibilidade.

Autor deste artigo
Fernando Cunha17/03/2025