Lección 10 de 20 · Lectura y práctica
Quiz: Navegación y gestión de estado en React Native
Tipo de lección: QuizConcepto claveLa navegación y gestión de estado son dos pilares fundamentales en el desarrollo de apps móviles con React Native. Imagina que tu app es una ciudad: la navegación son las calles y avenidas que.
Del concepto a la práctica
Taller de esta lección
Este quiz debe distinguir una ruta de un dato compartido. Presenta un caso: el usuario abre el detalle de p4, cambia la cantidad a 2 y luego visita el carrito. La ruta transporta productId; el contexto conserva la cantidad para que ambas pantallas observen el mismo valor.
Ejemplo resuelto
Pregunta qué se pasa al navegar:
productId: 'p4'.Pregunta dónde guardar el carrito: Contexto compartido.
Pregunta qué hook actualiza una cantidad local:
useState.Pregunta qué debe ocurrir al volver: el carrito muestra dos unidades. Un error frecuente es considerar que los parámetros de navegación sustituyen al estado global. Corrígelo explicando que un parámetro identifica una pantalla, pero no garantiza sincronización de todas las vistas.
Pruébalo
Redacta cinco preguntas sobre un flujo con catálogo, detalle y carrito; incluye una sobre un ID inexistente y otra sobre mutación de arrays.
Comprueba tu resultado
Debe haber una clave de respuestas única, con productId, Contexto, useState, dos unidades y actualización inmutable como resultados verificables.
Cinco preguntas con un único contrato
¿Qué parámetro abre el producto p4: productId, cantidadGlobal o funciónGuardar? productId:'p4'.
¿Qué comparte líneas entre pantallas: Context, params copiados o variable local de Detalle? Context situado sobre ambas.
¿Qué actualiza una cantidad local de edición: useState, Image o StyleSheet? useState; confirmar debe aplicar la acción global correspondiente.
¿Qué ocurre al abrir p9 sin registro: salida controlada, cerrar app o escoger p1 silenciosamente? Producto no encontrado.
¿Cómo cambiar un array de estado: nueva copia, push sobre el mismo array o editar props? nueva copia.
El caso parte de carrito vacío y p4 con stock al menos2; confirmar quantity2 deja una línea y dos unidades. Si ya había una cantidad, declara si la acción reemplaza o suma antes de evaluar. Volver al carrito no recalcula cantidad desde params históricos.
Redux Toolkit puede modificar el borrador de Immer con sintaxis aparentemente mutable dentro de reducers; eso no autoriza mutar arrays del useState directamente. Un listener de navegación se retira con el unsubscribe devuelto por addListener. Esta evaluación no necesita Redux para funcionar: distingue herramienta elegida y contrato de estado. El número de renders no es criterio de aprobar cantidades correctas.

Mapa de prácticaUna condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.
Ver la infografía en tamaño completo ↗Tipo de lección: Quiz
Concepto clave
La navegación y gestión de estado son dos pilares fundamentales en el desarrollo de apps móviles con React Native. Imagina que tu app es una ciudad: la navegación son las calles y avenidas que conectan diferentes barrios (pantallas), mientras que el estado es la información que los ciudadanos (componentes) comparten entre sí, como noticias o eventos. Sin una buena planificación de calles, los usuarios se pierden; sin un sistema eficiente para compartir información, la app se vuelve caótica.
En React Native con Expo, usamos bibliotecas como React Navigation para la navegación y Redux o Context API para el estado. La navegación maneja cómo los usuarios se mueven entre pantallas, usando stacks, tabs o drawers. La gestión de estado controla datos que múltiples componentes necesitan, como el perfil del usuario o configuraciones de la app. Combinarlos bien es clave para apps escalables y mantenibles.
Cómo funciona en la práctica
Vamos a crear una app simple de tareas para ver la navegación y gestión de estado en acción. Primero, instala las dependencias: expo install @react-navigation/native @react-navigation/stack react-redux redux. Luego, estructura tu proyecto con estas carpetas: screens/ para pantallas, store/ para el estado, y navigation/ para configurar rutas.
Paso 1: Configura el store de Redux en store/index.js para gestionar las tareas. Paso 2: Crea un stack navigator en navigation/AppNavigator.js con dos pantallas: HomeScreen y TaskDetailScreen. Paso 3: En HomeScreen, muestra una lista de tareas desde el estado y un botón para añadir nuevas. Paso 4: En TaskDetailScreen, permite editar una tarea específica, actualizando el estado global. Conecta las pantallas al store usando useSelector y useDispatch de React-Redux.
Código en acción
Aquí tienes un ejemplo funcional de configuración básica. Antes: sin gestión de estado, los datos pasan por props y se pierden al navegar.
// Antes: HomeScreen sin estado global
import React from 'react';
import { View, Text } from 'react-native';
export default function HomeScreen({ navigation }) {
const tasks = ['Tarea 1', 'Tarea 2']; // Estado local
return (
{tasks.map((task, index) => (
{task}
))}
);
}Después: integrando Redux para estado global accesible en cualquier pantalla.
// Después: HomeScreen con Redux
import React from 'react';
import { View, Text, Button } from 'react-native';
import { useSelector, useDispatch } from 'react-redux';
import { addTask } from '../store/taskSlice';
export default function HomeScreen({ navigation }) {
const tasks = useSelector(state => state.tasks); // Estado global
const dispatch = useDispatch();
const handleAddTask = () => {
dispatch(addTask('Nueva tarea')); // Actualiza estado
};
return (
{tasks.map((task, index) => (
navigation.navigate('TaskDetail', { taskId: index })}>
{task}
))}
);
}Errores comunes
- Anidar navigators incorrectamente: Mezclar stack, tab y drawer navigators sin planificar puede causar bugs de navegación. Solución: Diseña la estructura de navegación en papel primero y usa un solo navigator raíz.
- Estado duplicado: Guardar los mismos datos en el estado local y global, llevando a inconsistencias. Solución: Decide qué datos son globales (ej., usuario) y cuáles locales (ej., input temporal).
- No limpiar listeners de navegación: Olvidar remover event listeners en
useEffectpuede causar fugas de memoria. Solución: Siempre retorna una función de limpieza enuseEffect. - Pasar props en exceso por navegación: Enviar objetos grandes como parámetros de ruta, ralentizando la app. Solución: Pasa IDs y recupera datos del estado global.
- Ignorar el rendimiento en listas grandes: No usar
FlatListoSectionListpara listas, afectando la fluidez. Solución: Optimiza listas con estas componentes ykeyExtractor.
Checklist de dominio
- ¿Puedes configurar un stack navigator con al menos tres pantallas en Expo?
- ¿Sabes conectar un componente a Redux usando
useSelectoryuseDispatch? - ¿Has implementado navegación con parámetros y manejado su recepción?
- ¿Puedes diferenciar cuándo usar estado local vs. global en una app real?
- ¿Has probado la navegación en ambos iOS y Android para verificar consistencia?
- ¿Sabes depurar errores comunes de navegación como "undefined is not an object"?
- ¿Puedes refactorizar una app para mover estado de props a un store global?
Crea una app de notas con navegación y estado global
En este ejercicio, desarrollarás una app simple de notas móvil que use React Navigation para navegar entre pantallas y Redux para gestionar el estado global de las notas. Sigue estos pasos:
- Inicia un nuevo proyecto Expo:
expo init NotesAppy elige la plantilla en blanco. - Instala las dependencias necesarias:
expo install @react-navigation/native @react-navigation/stack react-redux redux @reduxjs/toolkit. - Crea la estructura de carpetas:
screens/,store/,navigation/. - En
store/notesSlice.js, define un slice de Redux con acciones para añadir, editar y eliminar notas. UsacreateSlicede Redux Toolkit. - Configura el store en
store/index.jsy envuélvelo alrededor de la app enApp.js. - En
navigation/AppNavigator.js, crea un stack navigator con dos pantallas:HomeScreen(lista de notas) yNoteDetailScreen(detalle/edición). - Implementa
HomeScreenenscreens/HomeScreen.js: muestra notas desde el store, un botón para añadir nuevas, y navega aNoteDetailScreenal tocar una nota. - Implementa
NoteDetailScreenenscreens/NoteDetailScreen.js: permite ver y editar una nota, actualizando el store al guardar. - Prueba la app en un emulador o dispositivo: añade notas, edítalas, y verifica que los cambios persistan al navegar.
- Opcional: Añade un drawer navigator para una pantalla de configuración que cambie el tema (claro/oscuro) usando estado global.
Pistas
- Usa
createStackNavigatorde React Navigation para definir las rutas enAppNavigator.js. - En el slice de Redux, define el estado inicial como un array de objetos con
id,title, ycontent. - Para navegar con parámetros, pasa el
idde la nota ennavigation.navigatey recupéralo conroute.params.
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.