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
TextInputTextInput 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
useStatepara manejar el estado del texto ingresado. - TextInput: El componente
TextInputtiene 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
