Lección 16 de 20 · Lectura y práctica
Diseño de la app y configuración de navegación
Concepto claveEl diseño de una app de comercio electrónico y su navegación son como el plano de un centro comercial. Imagina que el diseño define la distribución de las tiendas, pasillos y áreas comunes, mientras que la.
Del concepto a la práctica
Taller de esta lección
Antes de programar una tienda, define el recorrido mínimo y los datos que cruzan cada transición. Una ruta de detalle necesita un identificador; el carrito necesita acceso compartido; checkout necesita una instantánea de líneas y total calculado. Dibujar estas relaciones evita que cada pantalla invente su propia versión del producto.
Ejemplo resuelto
Flujo: Inicio -> Detalle(productId) -> Carrito -> Checkout. Desde Detalle se envía p1; Carrito lee el estado global; Checkout recibe las líneas actuales, pero recalcula el total para no confiar en un texto visual.
Pruébalo
Lista pantallas y propósito.
Anota parámetros de cada ruta.
Marca qué datos son globales.
Prueba volver atrás sin duplicar acciones.
Error frecuente: pasar el carrito completo como parámetro de navegación y crear copias divergentes. Corrige usando una fuente compartida y parámetros mínimos.
Ejercicio: navega con p1 y vuelve dos veces.
Comprueba tu resultado
una sola entrada en el carrito, detalle identifica p1 y la ruta no depende de una copia obsoleta.
Navegación sin efectos de negocio
Define p1=Cuaderno,p2=Lápiz,p3=Goma en catálogo único; precios/stock se concretan en17. Registra Inicio,Detalle,Carrito,Checkout. Detail recibe productId y consulta datos por ID; productId=p9 produce Producto no encontrado. El provider del carrito está por encima del stack manual, o por encima del Stack de Router en _layout. No dupliques NavigationContainer en Router.
La prueba comienza con carrito vacío. Abre p1 y pulsa Añadir exactamente una vez. Navega atrás, vuelve a p1 y regresa al carrito sin volver a añadir: sigue una línea con qty1. Abrir una pantalla por sí solo no crea líneas, envía pedidos ni modifica cantidades. Si el efecto de montaje añade productos, quítalo; la acción de negocio pertenece al botón. Declara qué retorno usa goBack/popTo y qué apertura usa navigate/push en React Navigation7, sin trasladar automáticamente las reglas de6. Un parámetro con todo el carrito se vuelve una copia obsoleta; usa estado compartido y parámetros serializables.

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
El diseño de una app de comercio electrónico y su navegación son como el plano de un centro comercial. Imagina que el diseño define la distribución de las tiendas, pasillos y áreas comunes, mientras que la navegación son las señales y mapas que guían a los clientes. En React Native con Expo, esto se traduce en crear una estructura visual atractiva y un flujo intuitivo entre pantallas.
Para apps de e-commerce, el diseño debe priorizar la experiencia del usuario: productos visibles, carrito accesible y checkout sencillo. La navegación, implementada con bibliotecas como React Navigation, conecta estas pantallas. Piensa en cómo Amazon o Mercado Libre organizan sus apps: pantalla de inicio, búsqueda, categorías, detalles del producto, carrito y perfil. Nuestro objetivo es replicar esa fluidez.
Cómo funciona en la práctica
Vamos a configurar la navegación para una app básica de e-commerce. Primero, instala React Navigation en tu proyecto Expo. Usa el comando: npx expo install react-native-screens react-native-safe-area-context y luego npm install @react-navigation/native @react-navigation/stack. Esto prepara el entorno para navegación tipo stack, ideal para transiciones entre pantallas.
Paso a paso: 1) Crea una carpeta screens con archivos como HomeScreen.js, ProductScreen.js, CartScreen.js. 2) En App.js, importa NavigationContainer y createStackNavigator. 3) Define las rutas, similar a cómo un mapa enlaza ubicaciones. Por ejemplo, HomeScreen lleva a ProductScreen, y este a CartScreen. 4) Añade botones o gestos para navegar, usando navigation.navigate('NombrePantalla'). Así, los usuarios pueden explorar productos y avanzar al checkout sin perderse.
Codigo en accion
Aquí tienes un ejemplo funcional de configuración básica en App.js. Antes de refactorizar, el código podría ser desorganizado; después, estará limpio y escalable.
Antes: Todo mezclado en un solo archivo, difícil de mantener.
// App.js desorganizado
import React from 'react';
import { View, Text } from 'react-native';
// Falta navegación y estructura clara
export default function App() {
return (
App de e-commerce
);
}Después: Configuración modular con navegación.
// App.js organizado
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
import ProductScreen from './screens/ProductScreen';
import CartScreen from './screens/CartScreen';
const Stack = createStackNavigator();
export default function App() {
return (
);
}Errores comunes
- Olvidar envolver la app en NavigationContainer: Sin esto, la navegación no funciona. Siempre inclúyelo en el componente raíz.
- No manejar el estado del carrito entre pantallas: Usa Context API o estado global (como Redux) para compartir datos, no props en cadena.
- Diseño no responsivo: Asegúrate de usar Flexbox y dimensiones relativas para que se vea bien en iOS y Android.
- Navegación anidada mal configurada: Para tabs o drawers, planifica la jerarquía; evita stacks dentro de stacks sin necesidad.
- Ignorar el performance en listas de productos: Usa FlatList con
keyExtractoryinitialNumToRenderpara optimizar.
Checklist de dominio
- ¿Instalaste React Navigation y sus dependencias correctamente en Expo?
- ¿Creaste al menos tres pantallas (Home, Producto, Carrito) en la carpeta screens?
- ¿Configuraste un Stack Navigator con rutas definidas en App.js?
- ¿Implementaste navegación entre pantallas usando
navigation.navigate? - ¿Diseñaste una interfaz básica con componentes de React Native (View, Text, Image)?
- ¿Probaste la app en un emulador o dispositivo real para verificar la fluidez?
- ¿Documentaste la estructura de navegación para futuras expansiones?
Configura navegación y diseño inicial para una app de e-commerce
Sigue estos pasos para crear la base de tu app:
- Inicia un nuevo proyecto Expo con
npx create-expo-app ecommerce-appy navega a la carpeta. - Instala React Navigation y las dependencias necesarias usando los comandos de npm o yarn.
- Crea una carpeta
screensy dentro, tres archivos:HomeScreen.js,ProductScreen.js,CartScreen.js. En cada uno, exporta un componente básico que muestre un texto (ej., "Pantalla de Inicio"). - En
App.js, configura el NavigationContainer y un Stack Navigator que enlace las tres pantallas. DefineHomecomo ruta inicial. - Añade un botón en HomeScreen que navegue a ProductScreen usando
navigation.navigate('Product'). Asegúrate de recibir la propnavigation. - Ejecuta la app con
npx expo starty prueba la navegación en un emulador o dispositivo. - Mejora el diseño: en HomeScreen, añade un header con un título y una lista simulada de productos usando FlatList.
Pistas
- Usa
import { useNavigation } from '@react-navigation/native'si no tienes la prop navigation directamente. - Para FlatList, define un array de datos dummy (ej., [{id: 1, name: 'Producto 1'}]) y renderiza cada item.
- Verifica que todas las pantallas estén correctamente importadas en App.js con rutas relativas.
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.