En esta lección, aprenderemos cómo manejar la entrada del usuario en React Native. Esto incluye el uso de componentes como TextInput
y la gestión de eventos para capturar y procesar la información ingresada por el usuario.
Contenidos
- Introducción a
TextInput
- Captura de Eventos de Entrada
- Validación de Entrada
- Ejemplo Práctico
- Ejercicio Práctico
- Introducción a
TextInput
TextInput
TextInput
es un componente básico en React Native que permite a los usuarios ingresar texto. Es similar a un campo de entrada en HTML.
Ejemplo Básico de TextInput
import React, { useState } from 'react'; import { View, TextInput, Text, StyleSheet } from 'react-native'; const TextInputExample = () => { const [text, setText] = useState(''); return ( <View style={styles.container}> <TextInput style={styles.input} placeholder="Escribe aquí..." onChangeText={newText => setText(newText)} defaultValue={text} /> <Text style={styles.text}>Has escrito: {text}</Text> </View> ); }; const styles = StyleSheet.create({ container: { padding: 20, }, input: { height: 40, borderColor: 'gray', borderWidth: 1, marginBottom: 10, paddingHorizontal: 10, }, text: { fontSize: 18, }, }); export default TextInputExample;
Explicación del Código
- Importaciones: Importamos los módulos necesarios de React y React Native.
- Estado: Usamos el hook
useState
para manejar el estado del texto ingresado. - TextInput: El componente
TextInput
tiene varias propiedades importantes:style
: Define el estilo del componente.placeholder
: Muestra un texto de marcador de posición cuando el campo está vacío.onChangeText
: Función que se llama cada vez que el texto cambia.defaultValue
: Valor inicial del campo de texto.
- Text: Muestra el texto ingresado por el usuario.
- Captura de Eventos de Entrada
Además de onChangeText
, TextInput
tiene otros eventos útiles:
onFocus
: Se llama cuando el campo de texto gana el foco.onBlur
: Se llama cuando el campo de texto pierde el foco.onSubmitEditing
: Se llama cuando el usuario presiona el botón de enviar en el teclado.
Ejemplo de Captura de Eventos
import React, { useState } from 'react'; import { View, TextInput, Text, StyleSheet } from 'react-native'; const TextInputEventsExample = () => { const [text, setText] = useState(''); const [message, setMessage] = useState(''); return ( <View style={styles.container}> <TextInput style={styles.input} placeholder="Escribe aquí..." onChangeText={newText => setText(newText)} onFocus={() => setMessage('El campo de texto tiene el foco')} onBlur={() => setMessage('El campo de texto ha perdido el foco')} onSubmitEditing={() => setMessage('El usuario ha enviado el texto')} defaultValue={text} /> <Text style={styles.text}>Has escrito: {text}</Text> <Text style={styles.message}>{message}</Text> </View> ); }; const styles = StyleSheet.create({ container: { padding: 20, }, input: { height: 40, borderColor: 'gray', borderWidth: 1, marginBottom: 10, paddingHorizontal: 10, }, text: { fontSize: 18, }, message: { fontSize: 16, color: 'blue', }, }); export default TextInputEventsExample;
- Validación de Entrada
La validación de entrada es crucial para asegurar que los datos ingresados por el usuario sean correctos y útiles. Podemos realizar validaciones simples directamente en el evento onChangeText
.
Ejemplo de Validación de Entrada
import React, { useState } from 'react'; import { View, TextInput, Text, StyleSheet } from 'react-native'; const TextInputValidationExample = () => { const [text, setText] = useState(''); const [error, setError] = useState(''); const handleTextChange = (newText) => { if (newText.length > 10) { setError('El texto no puede tener más de 10 caracteres'); } else { setError(''); } setText(newText); }; return ( <View style={styles.container}> <TextInput style={styles.input} placeholder="Escribe aquí..." onChangeText={handleTextChange} defaultValue={text} /> {error ? <Text style={styles.error}>{error}</Text> : null} <Text style={styles.text}>Has escrito: {text}</Text> </View> ); }; const styles = StyleSheet.create({ container: { padding: 20, }, input: { height: 40, borderColor: 'gray', borderWidth: 1, marginBottom: 10, paddingHorizontal: 10, }, text: { fontSize: 18, }, error: { color: 'red', }, }); export default TextInputValidationExample;
- Ejemplo Práctico
Vamos a combinar todo lo aprendido en un ejemplo práctico donde el usuario puede ingresar su nombre y edad, y validaremos que la edad sea un número.
import React, { useState } from 'react'; import { View, TextInput, Text, StyleSheet, Button, Alert } from 'react-native'; const UserInputExample = () => { const [name, setName] = useState(''); const [age, setAge] = useState(''); const [error, setError] = useState(''); const handleSubmit = () => { if (!name || !age) { setError('Por favor, completa todos los campos'); return; } if (isNaN(age)) { setError('La edad debe ser un número'); return; } setError(''); Alert.alert('Datos Enviados', `Nombre: ${name}, Edad: ${age}`); }; return ( <View style={styles.container}> <TextInput style={styles.input} placeholder="Nombre" onChangeText={setName} defaultValue={name} /> <TextInput style={styles.input} placeholder="Edad" onChangeText={setAge} defaultValue={age} keyboardType="numeric" /> {error ? <Text style={styles.error}>{error}</Text> : null} <Button title="Enviar" onPress={handleSubmit} /> </View> ); }; const styles = StyleSheet.create({ container: { padding: 20, }, input: { height: 40, borderColor: 'gray', borderWidth: 1, marginBottom: 10, paddingHorizontal: 10, }, error: { color: 'red', marginBottom: 10, }, }); export default UserInputExample;
- Ejercicio Práctico
Ejercicio
Crea una aplicación que permita al usuario ingresar su correo electrónico y contraseña. Valida que el correo electrónico tenga un formato válido y que la contraseña tenga al menos 6 caracteres. Muestra un mensaje de error si alguna de las validaciones falla.
Solución
import React, { useState } from 'react'; import { View, TextInput, Text, StyleSheet, Button, Alert } from 'react-native'; const EmailPasswordInput = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const validateEmail = (email) => { const re = /\S+@\S+\.\S+/; return re.test(email); }; const handleSubmit = () => { if (!email || !password) { setError('Por favor, completa todos los campos'); return; } if (!validateEmail(email)) { setError('El correo electrónico no es válido'); return; } if (password.length < 6) { setError('La contraseña debe tener al menos 6 caracteres'); return; } setError(''); Alert.alert('Datos Enviados', `Correo: ${email}`); }; return ( <View style={styles.container}> <TextInput style={styles.input} placeholder="Correo Electrónico" onChangeText={setEmail} defaultValue={email} keyboardType="email-address" /> <TextInput style={styles.input} placeholder="Contraseña" onChangeText={setPassword} defaultValue={password} secureTextEntry /> {error ? <Text style={styles.error}>{error}</Text> : null} <Button title="Enviar" onPress={handleSubmit} /> </View> ); }; const styles = StyleSheet.create({ container: { padding: 20, }, input: { height: 40, borderColor: 'gray', borderWidth: 1, marginBottom: 10, paddingHorizontal: 10, }, error: { color: 'red', marginBottom: 10, }, }); export default EmailPasswordInput;
Conclusión
En esta lección, hemos aprendido cómo manejar la entrada del usuario en React Native utilizando el componente TextInput
. Hemos cubierto cómo capturar eventos de entrada, realizar validaciones y crear ejemplos prácticos. Estos conceptos son fundamentales para crear aplicaciones interactivas y receptivas. En la próxima lección, exploraremos cómo manejar el desplazamiento y las listas en React Native.
Curso de React Native
Módulo 1: Introducción a React Native
- ¿Qué es React Native?
- Configuración del Entorno de Desarrollo
- Aplicación Hola Mundo
- Entendiendo JSX
- Componentes y Props
Módulo 2: Componentes Básicos y Estilizado
- Visión General de Componentes Básicos
- Texto, Vista e Imagen
- Estilizado con Flexbox
- Manejo de Entrada del Usuario
- ScrollView y ListView
Módulo 3: Estado y Ciclo de Vida
- Métodos de Estado y Ciclo de Vida
- Manejo de Eventos
- Renderizado Condicional
- Listas y Claves
- Formularios y Componentes Controlados
Módulo 4: Navegación
- Introducción a React Navigation
- Navegador de Pila
- Navegador de Pestañas
- Navegador de Cajón
- Pasando Parámetros a Rutas
Módulo 5: Redes y Datos
- Obteniendo Datos con Fetch API
- Usando Axios para Solicitudes HTTP
- Manejo de Errores de Red
- AsyncStorage para Datos Locales
- Integración con APIs REST
Módulo 6: Conceptos Avanzados
Módulo 7: Despliegue y Publicación
- Construyendo para iOS
- Construyendo para Android
- Publicando en App Store
- Publicando en Google Play
- Integración y Entrega Continua