Crear un carrusel con ScrollView horizontal
Clase 12 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
Construye un carrusel horizontal de hábitos sugeridos en la pestaña Explore con una experiencia ágil y clara. Aquí verás cómo crear el componente QuickAddChips con ScrollView, capturar selecciones con useState y renderizar lo elegido con FlatList. Todo centrado en componentización, manejo de estado y renderizado eficiente de listas.
¿Cómo crear un carrusel horizontal con ScrollView?
Para un carrusel de sugerencias, crea el componente QuickAddChips. La idea es mapear un arreglo de hábitos y mostrarlos como chips presionables. Define una prop onPick para notificar el hábito elegido y oculta la barra de scroll para una UI limpia. El carrusel se logra con ScrollView horizontal, showsHorizontalScrollIndicator: false y un ligero padding.
import React from 'react';
import { ScrollView, Pressable, Text, StyleSheet } from 'react-native';
type Suggestion = { title: string };
// Arreglo de sugerencias: define tus hábitos aquí.
const suggestions: Suggestion[] = [
// { title: '...' },
];
interface Props {
onPick?: (title: string) => void; // callback para el hábito seleccionado.
}
export function QuickAddChips({ onPick = () => {} }: Props) {
return (
<ScrollView
horizontal
showsHorizontalScrollIndicator={false}
contentContainerStyle={{ paddingHorizontal: 16 }}
>
{suggestions.map((s) => (
<Pressable
key={s.title} // ID por título para identificar el chip.
onPress={() => onPick(s.title)}
style={styles.chip}
>
<Text>{s.title}</Text>
</Pressable>
))}
</ScrollView>
);
}
const styles = StyleSheet.create({
chip: {
borderWidth: 1,
borderColor: '#ddd',
borderRadius: 999,
paddingVertical: 8,
paddingHorizontal: 12,
marginRight: 8,
},
});
¿Qué props clave usar?
- horizontal: activa el carrusel horizontal.
- showsHorizontalScrollIndicator: false para ocultar la barra.
- contentContainerStyle: padding para respiración visual.
- key con el título: identificador único por chip.
- onPress en Pressable: ejecuta onPick con el título.
¿Cómo capturar selecciones y administrar el estado con useState?
En Explore, necesitas registrar lo que el usuario selecciona. Usa useState para un arreglo de hábitos sugeridos elegidos y pásale al componente QuickAddChips un callback que agregue ítems al estado. Además, incluye textos guía como “Sugerencias rápidas” y “Seleccionados” para claridad.
import React, { useState } from 'react';
import { View, Text } from 'react-native';
import { QuickAddChips } from './QuickAddChips';
export function ExploreScreen() {
const [selected, setSelected] = useState<string[]>([]);
return (
// Si usas un contenedor reusable screen, envuélvelo aquí.
<View style={{ flex: 1, padding: 16 }}>
<Text style={{ fontSize: 16, fontWeight: '600' }}>Sugerencias rápidas</Text>
<QuickAddChips onPick={(title) => setSelected((prev) => [...prev, title])} />
<Text style={{ marginTop: 16, fontSize: 16, fontWeight: '600' }}>Seleccionados</Text>
{/* FlatList irá aquí para mostrar lo elegido. */}
</View>
);
}
¿Cómo integrar el componente en Explorer?
- Importa QuickAddChips desde su archivo.
- Declara el estado con useState para los seleccionados.
- Pasa onPick para agregar títulos al estado.
- Muestra textos guía para la sección.
¿Cómo listar hábitos seleccionados con FlatList?
Para renderizar lo seleccionado de forma declarativa y eficiente, usa FlatList. Define la data con tu estado, una keyExtractor basada en el título y un renderItem que muestre cada ítem. Si la lista está vacía, expón un ListEmptyComponent con el mensaje “toca un chip para añadir”.
import React from 'react';
import { FlatList, Text } from 'react-native';
// Dentro de ExploreScreen, debajo de “Seleccionados”.
<FlatList
data={selected}
keyExtractor={(t) => t}
renderItem={({ item }) => <Text>- {item}</Text>}
ListEmptyComponent={<Text>toca un chip para añadir.</Text>}
style={{ marginTop: 8 }}
/>
¿Qué detalles cuidan la experiencia?
- ID por título: simplifica claves únicas y evita colisiones.
- Mensaje de lista vacía: guía la interacción cuando no hay datos.
- Estilos con borde y espaciado: chips claros y legibles.
- Scroll horizontal sin barra: interfaz más limpia.
- Componentización: QuickAddChips se reutiliza y mantiene el código ordenado.
¿Te gustaría ver otra variante de chips o cómo manejar duplicados en el estado? Comparte tus dudas y comenta qué hábito agregarías primero.