El componente SectionList se utiliza para renderizar listas de datos agrupados en secciones, con cabeceras que permiten distinguir los grupos. Es ideal para listas largas y complejas con categorías.
import React from 'react';
import { SectionList, Text, View, StyleSheet } from 'react-native';
const datos = [
{
title: 'Sección 1',
data: ['Elemento 1', 'Elemento 2', 'Elemento 3'],
},
{
title: 'Sección 2',
data: ['Elemento A', 'Elemento B', 'Elemento C'],
},
{
title: 'Sección 3',
data: ['Elemento X', 'Elemento Y', 'Elemento Z'],
},
{
title: 'Sección 4',
data: ['Elemento 1', 'Elemento 2', 'Elemento 3'],
},
{
title: 'Sección 5',
data: ['Elemento A', 'Elemento B', 'Elemento C'],
},
{
title: 'Sección 6',
data: ['Elemento X', 'Elemento Y', 'Elemento Z'],
}
];
const App = () => {
return (
<SectionList
sections={datos}
renderItem={({ item }) => (
<View style={styles.item}>
<Text>{item}</Text>
</View>
)}
renderSectionHeader={({ section }) => (
<Text style={styles.header}>{section.title}</Text>
)}
keyExtractor={(item, index) => index}
/>
);
};
const styles = StyleSheet.create({
item: {
padding: 15,
marginVertical: 8,
backgroundColor: '#f9c2ff',
borderRadius: 10,
},
header: {
fontSize: 22,
fontWeight: 'bold',
backgroundColor: '#ddd',
padding: 10,
},
});
export default App; sections: Array de secciones, cada sección debe tener un title y un data (array de elementos).renderItem: Función que define cómo se ve cada elemento dentro de la sección.renderSectionHeader: Función que define cómo se ve la cabecera de cada sección.keyExtractor: Extrae una key única para cada item (se recomienda usar el índice si los datos son dinámicos).ListHeaderComponent: Componente opcional para agregar una cabecera a la lista completa.ListFooterComponent: Componente opcional para agregar un pie de lista.Esta propiedad se utiliza para mostrar un mensaje o componente cuando la lista no tiene datos.
Puedes usar ListEmptyComponent para mostrar un mensaje personalizado.
<SectionList
sections={[]}
renderItem={({ item }) => <Text>{item}</Text>}
renderSectionHeader={({ section }) => <Text>{section.title}</Text>}
ListEmptyComponent={<Text style={{ textAlign: 'center' }}>
No hay datos disponibles
</Text>}
/> Puedes agregar una cabecera a la lista completa utilizando la propiedad ListHeaderComponent.
Esto es útil para mostrar un título o información adicional sobre la lista.
<SectionList
sections={datos}
renderItem={({ item }) => <Text>{item}</Text>}
renderSectionHeader={({ section }) =>
<Text style={styles.header}>{section.title}</Text>
}
ListHeaderComponent={<Text style={{ fontSize: 24, fontWeight: 'bold' }}>
Lista de Elementos por Sección</Text>}
/> Puedes hacer que cada sección tenga un scroll horizontal utilizando la propiedad horizontal en el SectionList.
Esto es útil para mostrar elementos en una fila dentro de cada sección.
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
import { SectionList, Text, View, StyleSheet } from 'react-native';
const datos = [
{
title: 'Frutas',
data: ['Manzana', 'Banana', 'Naranja', 'Mango'],
},
{
title: 'Verduras',
data: ['Zanahoria', 'Brócoli', 'Lechuga', 'Espinaca'],
},
];
export default function App() {
return (
<SafeAreaProvider>
<SafeAreaView style={styles.safeArea}>
<SectionList
horizontal
sections={datos}
keyExtractor={(item, index) => item + index}
renderItem={({ item }) => (
<View style={styles.item}>
<Text style={styles.itemText}>{item}</Text>
</View>
)}
renderSectionHeader={({ section: { title } }) => (
<View style={styles.headerContainer}>
<Text style={styles.header}>{title}</Text>
</View>
)}
showsHorizontalScrollIndicator={false}
/>
</SafeAreaView>
</SafeAreaProvider>
);
}
const styles = StyleSheet.create({
safeArea: {
flex: 1,
paddingTop: 20,
backgroundColor: '#fff',
},
item: {
backgroundColor: 'skyblue',
padding: 15,
marginHorizontal: 8,
borderRadius: 10,
justifyContent: 'center',
alignItems: 'center',
},
itemText: {
fontSize: 16,
fontWeight: '500',
color: '#333',
},
headerContainer: {
justifyContent: 'center',
alignItems: 'center',
marginHorizontal: 10,
},
header: {
fontSize: 18,
fontWeight: 'bold',
color: '#007AFF',
marginBottom: 8,
},
}); SectionList es ideal cuando necesitas mostrar listas con cabeceras para secciones, ofreciendo una manera eficiente de manejar grupos de datos con scroll.