Pressable vs TouchableOpacity en React Native
Clase 11 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
Potencia tu app de hábitos con un flujo claro para añadir elementos y una UI consistente. Aquí verás cómo crear un botón primario reusable con Pressable, elegirlo frente a TouchableOpacity y optimizar la visualización vertical con ScrollView y espaciado controlado. Todo con enfoque práctico y directo.
¿Cómo construir un botón primario reusable con Pressable?
Crear un componente dedicado facilita mantener la consistencia y reutilizar lógica. Se propone un archivo PrimaryButton.tsx que recibe por props el title, el onPress, si está disabled y styles personalizados. Así, puedes usarlo para "Añadir hábito" y más.
¿Qué props recibe el botón?
- title como texto del botón.
- onPress como función a ejecutar al presionar.
- disabled como booleano para desactivar el botón.
- style para extender o sobrescribir estilos.
¿Cómo se implementa con estilos mínimos?
- Usa StyleSheet para definir base: mínimo alto y ancho, padding y centrado del contenido.
- Integra la paleta de colores: fondo en reposo y en presionado, y borde si aplica.
- Declara role como "button" y el label desde el title.
// PrimaryButton.tsx
import React from 'react';
import { Pressable, Text, StyleSheet, ViewStyle } from 'react-native';
type Props = {
title: string;
onPress: () => void;
disabled?: boolean;
style?: ViewStyle;
};
export function PrimaryButton({ title, onPress, disabled, style }: Props) {
return (
<Pressable
role="button"
accessibilityLabel={title}
onPress={onPress}
disabled={disabled}
style={[styles.button, style]}
>
<Text style={styles.label}>{title}</Text>
</Pressable>
);
}
const styles = StyleSheet.create({
button: {
minHeight: 48,
minWidth: 48,
padding: 12,
alignItems: 'center',
justifyContent: 'center',
// colores y borde desde la paleta.
},
label: {
// estilo del texto según la paleta/tipografía.
},
});
¿Cómo se usa en home para añadir hábitos?
- Importa el componente en la pantalla principal.
- Reemplaza el botón anterior por el reusable.
- Pasa el title "Añadir" y el onPress que invoca agregar hábito.
// En Home (index)
<PrimaryButton title="Añadir" onPress={addHabit} />
¿Por qué elegir Pressable frente a TouchableOpacity?
La elección clave radica en el control de estados de interacción. Con Pressable obtienes retroalimentación clara del usuario durante el gesto.
¿Qué ventaja aporta Pressable en la interacción?
- Expone estados como "press in" y "out" con precisión.
- Permite registrar logs y confirmar acciones al soltar.
- Mejora el feedback táctil más allá de la opacidad.
¿Qué limita a TouchableOpacity?
- Solo cambia la opacidad al presionar.
- No ofrece el mismo control de estados de interacción.
- Menos flexible para animaciones y estilos dependientes del estado.
¿Cómo listar hábitos con ScrollView y espaciado adecuado?
Cuando la lista crece, sustituir View por ScrollView permite desplazar verticalmente y ver todos los hábitos. Importa desde React Native y ajusta el contenedor de contenido para espaciado y padding inferior.
¿Cómo configurar el ScrollView en vertical?
- Reemplaza el contenedor principal por ScrollView.
- Oculta el indicador vertical si no lo necesitas.
- Controla el espaciado con contentContainerStyle.
import { ScrollView } from 'react-native';
<ScrollView
contentContainerStyle={{
paddingBottom: 32,
gap: 16,
}}
>
{/* Tarjetas de hábitos aquí. */}
</ScrollView>
¿Qué buenas prácticas aplicar al listar tarjetas?
- Usar un gap consistente entre ítems.
- Añadir padding inferior para el último ítem.
- Mantener el import desde React Native, no desde librerías de gestos.
¿Te gustaría ver variantes del botón o más patrones de listas? Comenta qué te interesa profundizar y qué retos encuentras al implementarlo.