Diferencias entre ScrollView y FlatList para listas grandes
Clase 13 de 23 • Curso de Fundamentos de React Native
Contenido del curso
- 5

Uso de constantes y condicionales en archivos TSX de React Native
10:36 - 6

Componentes reutilizables en React Native
14:50 - 7

StyleSheet y Flexbox en React Native
11:24 - 8

Paleta de colores con hooks en React Native
13:07 - 9

useState para interfaces dinámicas en React Native
12:12 - 10

Estado interactivo en React Native con useCallback
13:24 - 11

Pressable vs TouchableOpacity en React Native
09:37
- 12

Crear un carrusel con ScrollView horizontal
10:51 - 13

Diferencias entre ScrollView y FlatList para listas grandes
09:47 - 14

Instalación de Async Storage para persistencia de datos en React Native
14:54 - 15

Context y Provider para estado global de hábitos
12:08 - 16

AsyncStorage context para persistir hábitos
13:19 - 17

React Native: Provider de animación con confetti
11:58 - 18

Cómo crear una ExploreCard específica para iOS y Android
09:48 - 19

Implementación del tab Explore con FlatList y carga asíncrona
12:49 - 20

Contexto de perfil con persistencia y avatar aleatorio usando IA
12:32 - 21

Cámara y galería en React Native
16:01
La diferencia entre usar FlatList y ScrollView en React Native impacta directo en el rendimiento. Cuando la lista crece, el enfoque adecuado evita lag, mantiene la app fluida y mejora la experiencia de usuario, especialmente en pantallas como el home con muchos hábitos.
¿Por qué FlatList mejora el rendimiento en listas grandes?
FlatList “lee” el contenido hoja por hoja, renderizando solo lo necesario a medida que haces scroll. ScrollView, en cambio, intenta mostrar todo el “libro” de una vez, lo que provoca caídas de rendimiento cuando hay muchísimos hábitos y el scroll se siente con lag. Para listados grandes, FlatList es la opción adecuada; para listas pequeñas, ScrollView puede ser suficiente.
¿Qué problema aparece con ScrollView cuando crece el listado?
- Renderiza todos los elementos al mismo tiempo.
- Aumenta el consumo de memoria y procesamiento.
- Se percibe lag al desplazarse.
- No es funcional para listados demasiado grandes.
¿Cómo migrar el home de ScrollView a FlatList paso a paso?
Migrar implica definir identificadores y cómo se renderiza cada ítem, añadir espaciados y manejar el estado vacío. Así logras una lista eficiente y clara.
¿Qué constantes y funciones necesitas?
- Un identificador único con keyExtractor: se obtiene desde el ítem (ID del hábito) para que cada elemento sea estable.
- Un renderizador de ítems con useCallback: define cómo se ve cada hábito en pantalla.
- Un separador de elementos: aporta espaciado visual entre tarjetas.
- Un estado vacío: muestra un mensaje centrado cuando no hay hábitos.
// Import principal desde React Native
import { FlatList } from 'react-native';
// Identificador único por ítem
const keyExtractor = useCallback((item) => item.id, []);
// Render de cada hábito
const renderItem = useCallback(({ item }) => (
<HabitCard habit={item} onToggle={toggle} />
), [toggle]);
// Separador entre ítems
const ItemSeparator = () => <View style={{ height: 8 }} />;
// Estado vacío
const Empty = () => (
<View style={{ alignItems: 'center', justifyContent: 'center' }}>
<Text>La lista está vacía.</Text>
</View>
);
// Reemplazo de ScrollView por FlatList
<FlatList
data={habits}
keyExtractor={keyExtractor}
renderItem={renderItem}
ItemSeparatorComponent={ItemSeparator}
ListEmptyComponent={Empty}
/>
¿Cómo conectar la data y optimizar el renderizado?
- Pasa la propiedad data con tus hábitos.
- Usa keyExtractor para identidades estables.
- Define renderItem con useCallback para evitar renders innecesarios.
- Agrega un ItemSeparator para el espaciado visual.
- Implementa un estado vacío que muestre un texto claro cuando la lista esté sin datos.
- Aplica un estilo con inset para respetar el área segura del dispositivo.
¿Qué opciones afinan la experiencia de scroll?
Una vez montada la FlatList, hay ajustes que la hacen más eficiente y limpia visualmente.
¿Cómo limitar lo que se muestra al inicio y mejorar la velocidad?
- Renderiza solo ocho hábitos al inicio y, al llegar al final del scroll, renderiza los demás. Así mejoras la percepción de velocidad.
- Configura el windowSize para ajustar cuántas “páginas” virtuales mantiene la lista en memoria.
-
Oculta la barra de scroll (déjala en false) para una apariencia más limpia.
-
En pantalla se verá igual que con ScrollView, pero la diferencia está en el rendimiento cuando superas 10 o 30 hábitos.
- Con esto, tienes dos etiquetas para listas: usa ScrollView en listados pequeños y FlatList para listados con muchos componentes, asegurando un renderizado correcto y fluido.
¿Te quedó alguna duda sobre la migración o quieres ver otro ejemplo con tus datos de hábitos? Deja tu comentario y seguimos construyendo juntos.