El componente FlatList se utiliza para renderizar listas largas de datos en React Native, de manera eficiente y con scroll incorporado.
Es ideal para listas que pueden crecer en tamaño, ya que solo renderiza los elementos visibles en pantalla, mejorando el rendimiento de la aplicación.
import { FlatList, Text, View, StyleSheet } from 'react-native';
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
const datos = [
{ id: '1', nombre: 'Elemento 1' },
{ id: '2', nombre: 'Elemento 2' },
{ id: '3', nombre: 'Elemento 3' },
{ id: '4', nombre: 'Elemento 4' },
{ id: '5', nombre: 'Elemento 5' },
{ id: '6', nombre: 'Elemento 6' },
{ id: '7', nombre: 'Elemento 7' },
{ id: '8', nombre: 'Elemento 8' },
{ id: '9', nombre: 'Elemento 9' },
{ id: '10', nombre: 'Elemento 10' },
];
const App = () => {
const renderItem = ({ item }) => (
<View style={styles.item}>
<Text style={styles.texto}>{item.nombre}</Text>
</View>
);
return (
<SafeAreaProvider>
<SafeAreaView style={styles.safeArea}>
<FlatList
data={datos}
renderItem={renderItem}
keyExtractor={(item) => item.id}
ListHeaderComponent={<Text style={styles.encabezado}>📋 Lista de elementos</Text>}
ListFooterComponent={<Text style={styles.pie}>Fin de la lista</Text>}
ItemSeparatorComponent={() => <View style={styles.separador} />}
contentContainerStyle={styles.contenedor}
/>
</SafeAreaView>
</SafeAreaProvider>
);
};
const styles = StyleSheet.create({
safeArea: {
flex: 1,
backgroundColor: '#fff', // Fondo blanco para toda la vista segura
},
contenedor: {
paddingVertical: 10,
},
encabezado: {
fontSize: 20,
fontWeight: 'bold',
padding: 15,
textAlign: 'center',
backgroundColor: '#e0f7fa',
},
item: {
padding: 20,
marginHorizontal: 15,
backgroundColor: '#fce4ec',
borderRadius: 10,
alignItems: 'center', // Centra el texto dentro del View
},
texto: {
fontSize: 16,
color: '#333',
},
separador: {
height: 10,
},
pie: {
textAlign: 'center',
padding: 15,
fontStyle: 'italic',
color: '#666',
},
});
export default App; data: Array de datos a renderizar, puede ser un array de objetos.renderItem: Función que define cómo se ve cada elemento, recibe un objeto con item y index.keyExtractor: Extrae una key única para cada item, generalmente un ID.horizontal: Si se desea scroll horizontal (true | false).ListHeaderComponent: Componente opcional para cabecera.ListEmptyComponent: Componente que se muestra si data está vacío.Las listas vacías son comunes en aplicaciones, y FlatList permite manejar esto fácilmente con la propiedad ListEmptyComponent.
<FlatList
data={[]}
renderItem={({ item }) => <Text>{item.nombre}</Text>}
keyExtractor={(item) => item.id}
ListEmptyComponent={<Text style={{ textAlign: 'center' }}>No hay datos</Text>}
/> Puedes agregar una cabecera a la lista utilizando la propiedad ListHeaderComponent.
Esto es útil para mostrar un título o información adicional.
<FlatList
data={datos}
renderItem={({ item }) => <Text>{item.nombre}</Text>}
keyExtractor={(item) => item.id}
ListHeaderComponent={<Text style={{ fontSize: 20, fontWeight: 'bold' }}>Lista de elementos</Text>}
/> Si deseas que la lista se desplace horizontalmente, puedes usar la propiedad horizontal.
Esto es útil para listas de imágenes o elementos que se pueden ver uno al lado del otro.
<FlatList
horizontal
data={datos}
renderItem={({ item }) => (
<View style={{ padding: 10, backgroundColor: 'skyblue', margin: 5 }}>
<Text>{item.nombre}</Text>
</View>
)}
keyExtractor={(item) => item.id}
/> FlatList es ideal para listas largas porque solo renderiza lo que está en pantalla (y un poco más), haciendo que el rendimiento sea mucho mejor comparado con ScrollView.