O SectionList
é um componente essencial no React Native, projetado especificamente para renderizar listas com agrupamento por seções. Ele é ideal quando você precisa exibir dados organizados em categorias distintas, como uma lista de contatos ordenados pela primeira letra do nome ou eventos classificados por data. Ao longo deste artigo, você aprenderá como configurar e utilizar o SectionList
de forma eficiente, explorando suas funcionalidades e melhorando a experiência do usuário em suas aplicações.
Estrutura Básica do Componente SectionList
O SectionList
do React Native é ideal para exibir listas agrupadas em seções. Para configurá-lo, você precisa fornecer a prop sections
, que deve ser um array de objetos. Cada objeto define uma seção e contém duas propriedades essenciais:
- title: Define o título da seção.
- data: Um array de itens que pertencem a essa seção.
Aqui está um exemplo básico de configuração do SectionList
:
const sections = [
{
title: 'Section 1',
data: [
{ id: '1', name: 'Rodrigo' },
{ id: '2', name: 'João' }
]
},
{
title: 'Section 2',
data: [
{ id: '3', name: 'Maria' },
{ id: '4', name: 'Ana' }
]
}
];
Neste exemplo, o SectionList
é configurado com duas seções: “Section 1” e “Section 2”. Cada seção contém um array de itens, onde cada item é representado por um objeto com um id
e um name
. Esta estrutura permite criar listas organizadas e fáceis de navegar.
Configurando o SectionList
Para utilizar o SectionList
no React Native, você deve importá-lo e configurar suas propriedades principais: sections
, keyExtractor
, renderItem
, e renderSectionHeader
. Aqui está um guia passo a passo:
- Importação do SectionListPrimeiro, importe o
SectionList
junto com outros componentes necessários do React Native:
import React from 'react';
import { SectionList, Text, View } from 'react-native';
Definindo as Seções
A prop sections
deve ser um array de objetos, onde cada objeto representa uma seção com um título e um array de itens. Veja o exemplo:
const sections = [
{
title: 'Section 1',
data: [
{ id: '1', name: 'Rodrigo' },
{ id: '2', name: 'João' }
]
},
{
title: 'Section 2',
data: [
{ id: '3', name: 'Maria' },
{ id: '4', name: 'Ana' }
]
}
];
Configuração do SectionList
Utilize o SectionList
para renderizar suas seções e itens:
const MySectionList = () => {
return (
<SectionList
sections={sections}
keyExtractor={(item) => item.id}
renderItem={({ item }) => <Text>{item.name}</Text>}
renderSectionHeader={({ section: { title } }) => (
<View>
<Text style={{ fontWeight: 'bold', fontSize: 18 }}>{title}</Text>
</View>
)}
/>
);
};
export default MySectionList;
sections
: Recebe o array de seções que definimos anteriormente. Cada seção contém um título e um array de dados.keyExtractor
: Uma função que extrai a chave única para cada item. Normalmente, utilizamos oid
de cada item como a chave:
keyExtractor={(item) => item.id}
renderItem
: Função que renderiza cada item da lista. Recebe um objeto item
e retorna um componente React para exibir o item. Neste exemplo, estamos exibindo o nome de cada pessoa dentro de um componente Text
:
renderItem={({ item }) => <Text>{item.name}</Text>}
renderSectionHeader
: Função que renderiza o cabeçalho de cada seção. Recebe um objeto section
e retorna um componente React para exibir o título da seção. O título é exibido em um componente Text
com estilo em negrito e tamanho aumentado:
renderSectionHeader={({ section: { title } }) => (
<View>
<Text style={{ fontWeight: 'bold', fontSize: 18 }}>{title}</Text>
</View>
)}
Com essas configurações, você pode criar listas bem estruturadas e organizadas, facilitando a navegação e a visualização dos dados agrupados.
Estilizando o SectionList
Para melhorar a aparência do seu SectionList
, você pode aplicar estilos aos itens e cabeçalhos. O StyleSheet
do React Native é uma ferramenta poderosa para definir e aplicar estilos de forma eficiente e organizada. Vamos ver como você pode estilizar o seu SectionList
para torná-lo mais atraente.
- Importação do StyleSheetPrimeiro, importe o
StyleSheet
do React Native:
import React from 'react';
import { SectionList, Text, View, StyleSheet } from 'react-native';
Definindo os Estilos
Crie um objeto de estilos utilizando o StyleSheet.create
. Isso permite que você defina estilos para diferentes partes do seu SectionList
, como o cabeçalho da seção e os itens da lista:
const styles = StyleSheet.create({
sectionHeader: {
backgroundColor: '#f4f4f4',
padding: 10,
borderBottomWidth: 1,
borderBottomColor: '#ddd',
},
item: {
padding: 10,
fontSize: 16,
borderBottomWidth: 1,
borderBottomColor: '#ddd',
},
itemContainer: {
backgroundColor: '#fff',
},
title: {
fontWeight: 'bold',
fontSize: 18,
},
});
Aplicando Estilos ao SectionList
Use os estilos definidos no StyleSheet
para estilizar os componentes dentro do SectionList
. Aqui está o código atualizado com estilos aplicados:
const MySectionList = () => {
return (
<SectionList
sections={sections}
keyExtractor={(item) => item.id}
renderItem={({ item }) => (
<View style={styles.itemContainer}>
<Text style={styles.item}<{item.name}</Text>
</View>
)}
renderSectionHeader={({ section: { title } }) => (
<View style={styles.sectionHeader}>
<Text style={styles.title}>{title}</Text>
</View>
)}
/>
);
};
export default MySectionList;
sectionHeader
: Aplica um fundo cinza claro, padding e uma borda inferior para destacar o cabeçalho da seção.item
: Define o padding, o tamanho da fonte e a borda inferior para os itens da lista, garantindo uma aparência consistente e organizada.itemContainer
: Adiciona um fundo branco ao contêiner do item para criar um contraste visual com o item.title
: Estiliza o título da seção com negrito e um tamanho de fonte maior, tornando-o mais proeminente.
Resultado Final
Com esses estilos, seu SectionList
ficará visualmente mais atraente e mais fácil de ler. A personalização dos estilos pode ajudar a melhorar a experiência do usuário e tornar sua aplicação mais agradável visualmente.