9.1-22. Eventos
Manejo de Eventos en React Native: Interactuando con el Usuario
Los eventos son fundamentales para crear aplicaciones interactivas. En React Native, podemos capturar gestos del usuario como toques, deslizamientos o escritura. Hoy exploraremos cómo manejar estos eventos efectivamente.
📱 Evento Básico: onPress
El evento más común es el toque/clic, manejado con onPress:
import { TouchableOpacity } from 'react-native'; function MiBoton({ onPress }) { return ( <TouchableOpacity onPress={onPress}> {/* Contenido del botón */} </TouchableOpacity> ); }
Implementación en Functional Component
import React from 'react'; import { TouchableOpacity, View, StyleSheet } from 'react-native'; interface BotonProps { onPress: () => void; } function MiBoton({ onPress }: BotonProps) { return ( <TouchableOpacity style={styles.boton} onPress={onPress} > <View style={styles.circulo} /> </TouchableOpacity> ); } // Uso: <MiBoton onPress={() => console.log('Botón presionado!')} />
Implementación en Class Component
import React from 'react'; import { TouchableOpacity, View, StyleSheet } from 'react-native'; interface BotonClassProps { onPress: () => void; } class MiBotonClass extends React.Component<BotonClassProps> { render() { return ( <TouchableOpacity style={styles.boton} onPress={this.props.onPress} > <View style={styles.circulo} /> </TouchableOpacity> ); } } // Uso: <MiBotonClass onPress={() => console.log('Class Botón presionado!')} />
🎯 Tipos de Componentes para Eventos
| Componente | Descripción |
|---|---|
TouchableOpacity | Reduce opacidad al presionar (el más usado) |
TouchableHighlight | Cambia color de fondo |
TouchableWithoutFeedback | Gestos sin feedback visual |
Pressable | Versión moderna (React Native 0.63+) |
🔄 Tipos Comunes de Eventos
Toque/Click:
<TouchableOpacity onPress={() => alert('¡Toque!')}>Toque Largo:
<TouchableOpacity onLongPress={() => alert('Toque prolongado')}>Scroll:
<ScrollView onScroll={({ nativeEvent }) => console.log(nativeEvent)}>Teclado:
<TextInput onChangeText={(text) => console.log(text)} />
💡 Buenas Prácticas
Desacoplar lógica:
const handlePress = () => { // Lógica compleja aquí }; <TouchableOpacity onPress={handlePress}>
Evitar funciones inline para renders frecuentes:
// ❌ Evitar en listas grandes <FlatList renderItem={({ item }) => ( <TouchableOpacity onPress={() => handleItemPress(item.id)}> )} /> // ✅ Mejor const renderItem = ({ item }) => ( <TouchableOpacity onPress={handleItemPress}> );
TypeScript para tipos seguros:
interface Props { onPress: (itemId: string) => void; }
🚀 Ejemplo Completo: Botón Reutilizable
interface AwesomeButtonProps { title: string; onPress: () => void; color?: string; } function AwesomeButton({ title, onPress, color = '#3498db' }: AwesomeButtonProps) { return ( <TouchableOpacity style={[styles.button, { backgroundColor: color }]} onPress={onPress} activeOpacity={0.7} > <Text style={styles.text}>{title}</Text> </TouchableOpacity> ); } // Uso: <AwesomeButton title="Guardar" onPress={saveData} color="#2ecc71" />
📌 Conclusión
Usa
TouchableOpacitypara la mayoría de casos de interacciónTipa tus eventos con TypeScript para mayor seguridad
Considera
Pressablepara proyectos nuevos (ofrece más control)Desacopla la lógica de los handlers para código más limpio
Comentarios
Publicar un comentario