Lección 5 de 20 · Lectura y práctica
Quiz: Fundamentos de React Native y Expo
Tipo de lección: QuizConcepto claveReact Native con Expo es un framework que permite desarrollar aplicaciones móviles nativas para iOS y Android utilizando JavaScript y React. A diferencia de las aplicaciones web, React Native.
Del concepto a la práctica
Taller de esta lección
Este repaso debe comprobar decisiones, no memoria de nombres. Dado un escenario, identifica si el problema pertenece al entorno, al componente, al estado o a la navegación. Un proyecto puede iniciar correctamente y aun así tener una ruta inexistente; son comprobaciones distintas.
Ejemplo resuelto
Pregunta: el botón cambia el estado, pero el texto no cambia. Respuesta verificable: el texto no está renderizando ese estado o se modificó una variable que no pertenece a useState. La solución se prueba pulsando y observando la salida.
Pruébalo
Clasifica un error de importación como estructura.
Clasifica una ruta no registrada como navegación.
Clasifica un texto obsoleto como estado o renderizado.
Escribe una evidencia observable para cada clasificación.
Error frecuente: responder que Expo reemplaza React Native. Corrige: Expo simplifica herramientas y configuración, mientras React Native proporciona el modelo de componentes móviles.
Ejercicio: resuelve estas tres afirmaciones: View agrupa contenido; navigate cambia de ruta registrada; setState solicita un nuevo render.
Comprueba tu resultado
las tres son verdaderas, con una evidencia concreta para cada una.
Cuatro preguntas con condiciones precisas
¿View puede envolver texto visible directamente? No: ese texto va en Text.
Desde false, ¿setActivo(v=>!v) cambia la salida? Sí, pasa a true; setear otra vez el mismo valor puede permitir que React omita trabajo y no garantiza un render adicional.
¿navigate('Detalle',{productId:'p2'}) siempre funciona? Requiere una ruta registrada y accesible con ese nombre; no publica ni añade un artículo al carrito.
¿Se inicia un proyecto actual con la instalación global expo-cli y expo init? Usa create-expo-app y CLI local npx expo start; aquellos comandos son contexto histórico.
La clave es no, true con cambio de estado, requiere ruta, CLI local. Comprueba también que un TextInput produce strings y que el contador del ejercicio anterior usa actualización funcional. Evita declarar un número exacto de renders a partir de toques: batching y desarrollo pueden cambiar observaciones. Los resultados de estado sí tienen un contrato verificable. El SafeAreaView recomendado procede de safe-area-context con proveedor; safe-area no sustituye validación, navegación ni almacenamiento.

Mapa de prácticaEl texto alternativo comunica el propósito de una imagen. La navegación por teclado necesita un foco visible; los campos necesitan etiquetas y la página una estructura semántica. Estas comprobaciones ayudan a detectar barreras y no sustituyen una auditoría completa.
Ver la infografía en tamaño completo ↗Tipo de lección: Quiz
Concepto clave
React Native con Expo es un framework que permite desarrollar aplicaciones móviles nativas para iOS y Android utilizando JavaScript y React. A diferencia de las aplicaciones web, React Native compila componentes en elementos nativos de cada plataforma, lo que resulta en un rendimiento similar al de aplicaciones desarrolladas con Swift o Kotlin. Expo actúa como una capa de abstracción que simplifica la configuración, proporcionando herramientas como el cliente Expo Go para probar aplicaciones directamente en dispositivos físicos sin necesidad de configurar entornos complejos de desarrollo nativo.
Imagina que estás construyendo una casa: React Native sería como usar un sistema de construcción modular que funciona tanto para casas de madera (iOS) como de ladrillo (Android), mientras que Expo sería el equipo de arquitectos que te proporciona planos predefinidos y herramientas para evitar tener que aprender cada detalle de construcción desde cero. Esto acelera el desarrollo y reduce la barrera de entrada, permitiendo a desarrolladores web expandir sus habilidades al mundo móvil con una curva de aprendizaje manejable.
Cómo funciona en la práctica
El flujo de trabajo típico comienza con la creación de un proyecto usando la CLI de Expo. Una vez inicializado, puedes escribir componentes React que se traducen a vistas nativas. Por ejemplo, un componente View en React Native se convierte en una UIView en iOS y en un android.view en Android. Expo maneja automáticamente la configuración de permisos, iconos y builds, permitiéndote enfocarte en la lógica de la aplicación.
Paso a paso: primero, instalas Expo CLI globalmente con npm install -g expo-cli. Luego, creas un nuevo proyecto con expo init MiApp. Esto genera una estructura básica con archivos como App.js, donde defines tu componente principal. Usas expo start para iniciar el servidor de desarrollo, que genera un código QR que puedes escanear con la app Expo Go en tu teléfono para ver los cambios en tiempo real. A medida que desarrollas, Expo gestiona las dependencias y actualizaciones, facilitando iteraciones rápidas.
Código en acción
Aquí tienes un ejemplo básico de un componente funcional en React Native con Expo que muestra un saludo y un botón:
import React from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
export default function App() {
const [mensaje, setMensaje] = React.useState('Hola Mundo');
const cambiarMensaje = () => {
setMensaje('¡Hola desde React Native con Expo!');
};
return (
{mensaje}
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#f5f5f5',
},
texto: {
fontSize: 20,
marginBottom: 20,
},
});Refactorización para mejorar la legibilidad: en lugar de definir estilos inline, podemos extraerlos a un archivo separado o usar constantes. Aquí está el "antes y después":
Antes (estilos inline, menos mantenible):
// En el componente
Texto
Después (usando StyleSheet, más eficiente y organizado):
// Definido fuera del componente
const styles = StyleSheet.create({
contenedor: { flex: 1, justifyContent: 'center', alignItems: 'center' },
texto: { fontSize: 20 },
});
// En el componente
Texto
Errores comunes
- No probar en ambos dispositivos: iOS y Android pueden renderizar componentes de forma diferente; siempre verifica en emuladores o dispositivos reales de ambas plataformas.
- Olvidar manejar permisos: Expo simplifica esto, pero aún necesitas configurar permisos como cámara o ubicación en app.json; omisión puede causar fallos en producción.
- Uso excesivo de librerías de terceros: Añadir muchas dependencias puede aumentar el tamaño de la app y causar conflictos; evalúa si son necesarias y mantén un bundle optimizado.
- Ignorar el ciclo de vida de componentes: En React Native, componentes como useEffect deben manejarse correctamente para evitar memory leaks, especialmente en apps con navegación compleja.
- No optimizar imágenes: Imágenes grandes sin compresión ralentizan la app; usa herramientas como expo-optimize o servicios de CDN para assets.
Checklist de dominio
- Puedo inicializar un proyecto de Expo y ejecutarlo en un dispositivo físico usando Expo Go.
- Comprendo la diferencia entre componentes de React Native (ej., View, Text) y sus equivalentes nativos.
- Sé configurar permisos básicos en app.json para funcionalidades como notificaciones o cámara.
- Puedo depurar errores comunes usando las herramientas de desarrollo de React Native y los logs de Expo.
- He refactorizado código para usar StyleSheet en lugar de estilos inline, mejorando el rendimiento.
- Puedo explicar cómo Expo maneja builds y publicaciones para App Store y Google Play.
- Sé integrar una API simple en mi app y manejar estados con useState o useContext.
Crear una app de lista de tareas con Expo y React Native
En este ejercicio, desarrollarás una aplicación móvil básica de lista de tareas que permita agregar y eliminar items. Sigue estos pasos:
- Crea un nuevo proyecto Expo usando el comando
expo init ListaTareasy selecciona el template en blanco (blank). - Abre el archivo App.js y reemplaza su contenido con un componente funcional que incluya:
- Un estado inicial con un array de tareas (ej., [{ id: 1, text: 'Aprender React Native' }]).
- Un TextInput para agregar nuevas tareas y un Button que al presionar añada la tarea al estado.
- Una FlatList que muestre cada tarea como un Text con un Button para eliminarla.
- Estiliza la app usando StyleSheet para que sea visualmente clara, con colores diferenciados para tareas completadas.
- Prueba la app en tu dispositivo físico escaneando el código QR generado por
expo start. - Agrega validación para evitar tareas vacías y maneja errores básicos en la interfaz.
Objetivo: Al final, tendrás una app funcional que demuestra el manejo de estado, listas y interacción de usuario en React Native con Expo.
Pistas
- Usa useState para manejar el array de tareas y el texto del input.
- FlatList requiere una keyExtractor; usa el id de cada tarea para optimizar el rendimiento.
- Para eliminar una tarea, filtra el array de estado basado en el id.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con React Native y Expo: Interfaces, Estado y APIs de Dispositivo
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.