Lección 6 de 20 · Lectura y práctica
Configuración de React Navigation para navegación entre pantallas
Concepto claveLa navegación en aplicaciones móviles es como el sistema de calles de una ciudad: permite a los usuarios moverse entre diferentes pantallas (destinos) de manera organizada. React Navigation es la biblioteca estándar.
Del concepto a la práctica
Taller de esta lección
Una ruta bien definida necesita un nombre estable y una pantalla que sepa qué recibe. Para una tienda pequeña, Catalogo puede abrir Detalle con el identificador de producto, evitando pasar el objeto completo y reduciendo datos duplicados.
Ejemplo resuelto
Declara las rutas
CatalogoyDetalleen un stack.Desde la lista, llama a
navigate('Detalle', { productId: 'p2' }).En la pantalla destino, lee
route.params?.productId.Busca el registro en la fuente local y muestra un mensaje si no existe. Un error frecuente es navegar con
idy leerproductId, lo que produceundefined. Corrígelo usando el mismo nombre en origen y destino, y valida la ausencia antes de renderizar detalles.
Pruébalo
Define tres productos con IDs p1, p2 y p3; abre p2 y después prueba un ID inexistente.
Comprueba tu resultado
p2 debe mostrar solo su producto, mientras que el ID desconocido debe mostrar una salida controlada como Producto no encontrado, sin cerrar la aplicación.
Stack actual y entradas ausentes
Para navegación manual instala @react-navigation/native y @react-navigation/native-stack, y usa npx expo install para react-native-screens/react-native-safe-area-context compatibles. createNativeStackNavigator se importa de native-stack. Un NavigationContainer en la raíz contiene el stack; Expo Router ya administra el suyo y no requiere otro contenedor manual.
Usa el catálogo completo [{id:'p1',name:'Cuaderno'},{id:'p2',name:'Agenda'},{id:'p3',name:'Lápiz'}]. En Detalle lee route.params?.productId y busca por ID. p2 muestra Agenda; p9 o una apertura sin params muestran Producto no encontrado. No leas route.params.productId antes de comprobar el caso ausente. El stack registra Catalogo y Detalle, y una pantalla Catalogo recibe navigation como prop registrada; no es una variable global disponible en cualquier función.
React Navigation7 cambió ciertos comportamientos de navigate: para volver utiliza goBack, o popTo cuando necesites un destino previo explícito; navegar no garantiza recuperar cualquier instancia anterior. Pasar un ID evita duplicar objetos de precio/stock, pero Detalle sigue necesitando acceso a la fuente actual. Prueba p2, p9 y params ausentes desde estados iniciales separados. Migración7.

Mapa de prácticaLas pestañas organizan secciones y cada stack conserva su historial de pantallas. Pasar un identificador de producto permite abrir el detalle sin duplicar el objeto completo; comprueba el regreso y los parámetros.
Ver la infografía en tamaño completo ↗Concepto clave
La navegación en aplicaciones móviles es como el sistema de calles de una ciudad: permite a los usuarios moverse entre diferentes pantallas (destinos) de manera organizada. React Navigation es la biblioteca estándar en React Native para gestionar esta navegación, proporcionando componentes y configuraciones que simulan la experiencia nativa de iOS y Android. Sin una navegación adecuada, tu app sería como una casa con puertas que no llevan a ninguna parte: los usuarios quedarían atrapados en una sola pantalla.
En el contexto de Expo, React Navigation se integra perfectamente sin necesidad de configuración nativa adicional, lo que acelera el desarrollo. Imagina que cada pantalla es una habitación en un edificio: React Navigation te da las herramientas para crear puertas (botones, gestos) que conectan estas habitaciones, manteniendo un historial de navegación (como un mapa de dónde has estado) y permitiendo pasar información entre ellas (como llevar objetos de una habitación a otra).
Cómo funciona en la práctica
Para implementar React Navigation en tu proyecto de Expo, sigue estos pasos. Primero, asegúrate de tener un proyecto Expo creado (puedes usar npx create-expo-app). Luego, instala las dependencias necesarias desde la terminal:
npx expo install @react-navigation/native @react-navigation/stackEsto instala el núcleo de React Navigation y el stack navigator, que es ideal para apps con un flujo lineal de pantallas (como un proceso de registro). Expo maneja automáticamente las dependencias nativas, así que no necesitas ejecutar pod install o similares. Una vez instalado, importa los componentes en tu archivo principal (por ejemplo, App.js) y configura el navegador básico.
Antes de la configuración, tu app podría tener solo una pantalla estática. Después, podrás definir múltiples pantallas y navegar entre ellas. Por ejemplo, antes tenías un componente simple; ahora, envolverás tu app en un NavigationContainer y definirás un stack de pantallas.
Codigo en accion
Aquí tienes un ejemplo funcional de configuración básica con un stack navigator. Crea un archivo App.js en tu proyecto Expo y copia este código:
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
// Pantallas de ejemplo
function HomeScreen({ navigation }) {
return (
Pantalla de Inicio
);
}
function DetailsScreen({ navigation }) {
return (
Pantalla de Detalles
);
}
const Stack = createStackNavigator();
function App() {
return (
);
}
export default App;Este código configura dos pantallas (Home y Details) con navegación entre ellas. El NavigationContainer es el contenedor raíz que gestiona el estado de navegación. El Stack.Navigator define el orden de las pantallas, y cada Stack.Screen asocia un nombre con un componente. Para que funcione, asegúrate de importar View, Text, y Button de react-native.
Errores comunes
- Olvidar envolver la app en NavigationContainer: Sin esto, la navegación no funcionará. Siempre inclúyelo como componente raíz.
- Usar nombres incorrectos en navigation.navigate(): El nombre debe coincidir exactamente con el definido en
Stack.Screen. Verifica mayúsculas y minúsculas. - No manejar imports correctamente: Asegúrate de importar
createStackNavigatordesde@react-navigation/stacky no de versiones obsoletas. - Ignorar el initialRouteName: Si no lo configuras, React Navigation usará la primera pantalla en el stack, lo que podría no ser la deseada.
- No probar en ambos iOS y Android: Algunos comportamientos de navegación pueden variar; usa el simulador de Expo para verificar.
Checklist de dominio
- Instalé React Navigation y sus dependencias usando
npx expo install. - Configuré un
NavigationContainercomo raíz de mi app. - Definí al menos dos pantallas usando
createStackNavigator. - Implementé navegación entre pantallas con
navigation.navigate()ynavigation.goBack(). - Probé la navegación en un simulador de Expo (iOS y Android).
- Verifiqué que los nombres de pantallas coincidan en la configuración y navegación.
- Entendí el rol de
initialRouteNameen el stack navigator.
Crear una app de tareas con navegación básica
En este ejercicio, crearás una app simple de lista de tareas con dos pantallas usando React Navigation y Expo. Sigue estos pasos:
- Crea un nuevo proyecto Expo ejecutando
npx create-expo-app TaskAppen tu terminal y navega al directorio del proyecto. - Instala React Navigation y el stack navigator con
npx expo install @react-navigation/native @react-navigation/stack. - En
App.js, reemplaza el contenido con un stack navigator que tenga dos pantallas:TaskListScreen(lista de tareas) yTaskDetailScreen(detalles de una tarea). - En
TaskListScreen, muestra una lista estática de al menos 3 tareas (puedes usar un array de objetos). Cada tarea debe tener un botón que navegue aTaskDetailScreenpasando el nombre de la tarea como parámetro. - En
TaskDetailScreen, muestra el nombre de la tarea recibido y un botón para volver a la lista. - Ejecuta la app con
npx expo starty prueba la navegación en un simulador o dispositivo físico.
Pistas
- Usa el hook
useNavigationsi necesitas acceder a la navegación dentro de componentes que no son pantallas. - Para pasar parámetros entre pantallas, usa
navigation.navigate('ScreenName', { param: value })y accede conroute.paramsen la pantalla de destino. - Asegúrate de importar todos los componentes de React Native necesarios, como
FlatListpara la lista de tareas.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con React Native con Expo: Desarrollo de Apps Nativas para iOS y Android
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.