Saltar al contenido

Lección 20 de 20 · Lectura y práctica

Quiz: Evaluación final del proyecto integrador

Tipo de lección: QuizConcepto claveEl desarrollo de una app de e-commerce con React Native y Expo requiere integrar múltiples conceptos fundamentales de manera cohesiva. Piensa en esto como construir una tienda física: necesitas.

Del concepto a la práctica

Taller de esta lección

La evaluación final debe comprobar el flujo completo y la aritmética del carrito. Usa cuatro registros de entrada: p1 a 4.00, p2 a 7.50, p3 a 2.25 y p4 a 10.00. Un caso puede añadir dos unidades de p1 y una de p3.

Ejemplo resuelto

  1. Verifica que el catálogo cargue los cuatro IDs.

  2. Abre p1 desde la navegación y añade dos unidades.

  3. Añade una unidad de p3 desde su detalle.

  4. Calcula 2 × 4.00 + 1 × 2.25 = 10.25. Un error frecuente es evaluar solo que las pantallas existan, sin comprobar que compartan estado. Corrígelo volviendo al catálogo, entrando al carrito y contrastando cantidades e importe.

Pruébalo

Escribe ocho preguntas: dos de arquitectura, dos de navegación, dos de estado, una de API y una de permisos.

Comprueba tu resultado

El caso práctico debe terminar con dos líneas, tres unidades totales y subtotal 10.25; el cuestionario debe incluir una clave inequívoca y no afirmar funciones que no hayas ejecutado.

Clave final y estado reproducible

Usa el catálogo común de la lección16 y carrito inicial[]. Agrega p1 dos veces y p3 una vez: líneas2, unidades3, subtotal1025centavos=10.25. Quitar una unidad p1 deja2unidades y625=6.25. No uses los120/650del laboratorio HTTP en esta cuenta.

Ocho preguntas con respuestas:1)¿dónde se transforma la respuesta? servicio;2)¿dónde vive el carrito compartido? proveedor sobre pantallas;3)¿parámetro de detalle? productId;4)¿retorno explícito? goBack en el stack pertinente;5)¿actualización del array? nueva copia;6)¿badge con quantity2/1?3unidades;7)¿HTTP200 con precio ausente? esquema rechazado;8)¿GPS denegado? selección manual, sin coordenadas inventadas. Añade opciones alternativas y explica por qué cada clave cumple el contrato.

La confirmación simulada no demuestra pago ni pedido enviado. En un checkout real el servidor establece importe, moneda, inventario y permisos, y confirma el pago mediante mecanismos del proveedor; no confíes en un botón de éxito del móvil. Persistencia necesita hidratación validada antes de escribir estado inicial y fallos observables. La entrega registra datos iniciales, eventos y salidas, no solo existencia de componentes. Evalúa también la sesión rechazada y error de productos, sin afirmar pruebas de dispositivo que todavía estén pendientes.

Proveedor de pago que envía un webhook verificado al servidor; registro idempotente antes de conceder acceso.
CursaloMapa de práctica
Confirmar el pago en el servidor

El servidor concede acceso a partir de un evento verificado del proveedor y un registro persistente. La pantalla de éxito del navegador es una notificación, no una prueba suficiente de pago. La idempotencia evita duplicar la operación cuando el evento llega más de una vez.

Ver la infografía en tamaño completo ↗

Tipo de lección: Quiz

Concepto clave

El desarrollo de una app de e-commerce con React Native y Expo requiere integrar múltiples conceptos fundamentales de manera cohesiva. Piensa en esto como construir una tienda física: necesitas un catálogo de productos (gestión de datos), un carrito de compras (gestión de estado), un proceso de pago (integración con APIs externas) y una experiencia de usuario fluida (navegación y rendimiento). La clave está en cómo estos componentes interactúan entre sí para crear una experiencia completa.

En React Native, esto se traduce en componentes reutilizables, manejo de estado con Context o Redux, navegación con React Navigation, y consumo de APIs RESTful. La analogía de la tienda física ayuda a visualizar cada parte: el catálogo es tu pantalla de productos, el carrito es tu estado global, el pago es tu integración con servicios como Stripe, y la experiencia del cliente es tu interfaz de usuario optimizada.

Cómo funciona en la práctica

Vamos a desglosar el proceso paso a paso para una app de e-commerce básica. Primero, configura tu proyecto con Expo CLI: expo init ecommerce-app. Luego, instala dependencias clave como React Navigation, AsyncStorage para persistencia, y Axios para llamadas a APIs. Estructura tu proyecto en carpetas como screens, components, context, y services.

Paso 1: Crea un contexto para el carrito de compras. Esto permitirá que cualquier componente acceda y modifique el estado del carrito sin pasar props manualmente. Paso 2: Implementa la pantalla de productos, que consume datos de una API mock o real y los muestra en una FlatList. Paso 3: Añade funcionalidad para agregar productos al carrito, actualizando el contexto. Paso 4: Desarrolla la pantalla del carrito, que muestra los items y permite ajustar cantidades o eliminarlos. Paso 5: Integra un proceso de pago simulado, como un formulario que valida datos y confirma la compra.

Código en acción

Aquí tienes un ejemplo funcional de un contexto de carrito de compras:

import React, { createContext, useState, useContext } from 'react';

const CartContext = createContext();

export const CartProvider = ({ children }) => {
  const [cartItems, setCartItems] = useState([]);

  const addToCart = (product) => {
    setCartItems((prevItems) => {
      const existingItem = prevItems.find(item => item.id === product.id);
      if (existingItem) {
        return prevItems.map(item =>
          item.id === product.id
            ? { ...item, quantity: item.quantity + 1 }
            : item
        );
      }
      return [...prevItems, { ...product, quantity: 1 }];
    });
  };

  const removeFromCart = (productId) => {
    setCartItems(prevItems => prevItems.filter(item => item.id !== productId));
  };

  return (
    
      {children}
    
  );
};

export const useCart = () => useContext(CartContext);

Ahora, un ejemplo de cómo usar este contexto en un componente de producto:

import React from 'react';
import { View, Text, Button } from 'react-native';
import { useCart } from '../context/CartContext';

const ProductItem = ({ product }) => {
  const { addToCart } = useCart();

  return (
    
      {product.name}
      Precio: ${product.price}
      
  );
};

export default ProductItem;

Errores comunes

  • No optimizar listas largas: Usar ScrollView en lugar de FlatList para listas de productos puede causar problemas de rendimiento. Siempre usa FlatList con keyExtractor y renderItem eficientes.
  • Manejo inadecuado del estado global: Pasar props en cadena (prop drilling) en lugar de usar Context o Redux hace el código difícil de mantener. Refactoriza temprano para evitar esto.
  • Olvidar la persistencia de datos: No guardar el estado del carrito en AsyncStorage o similar significa que se pierde al recargar la app. Implementa sincronización con useEffect.
  • Ignorar el manejo de errores en APIs: No incluir try-catch o estados de carga/error al consumir APIs puede llevar a crashes. Usa estados como loading y error para mejorar la UX.
  • Diseño no responsive: Asumir tamaños de pantalla fijos en estilos. Usa Dimensions o porcentajes para asegurar que la app se vea bien en todos los dispositivos.

Checklist de dominio

  1. Configurar un proyecto Expo desde cero con estructura de carpetas organizada.
  2. Implementar navegación entre al menos 3 pantallas (ej., productos, carrito, perfil) usando React Navigation.
  3. Crear y consumir un contexto global para manejar el estado de la app (ej., carrito de compras).
  4. Consumir una API RESTful para obtener y mostrar datos de productos, con manejo de estados de carga y error.
  5. Implementar funcionalidades CRUD básicas en la app, como agregar/eliminar items del carrito.
  6. Usar componentes reutilizables y estilos consistentes en toda la app.
  7. Probar la app en un dispositivo físico o emulador para iOS y Android, verificando que funcione correctamente.

Implementar un carrito de compras persistente

En este ejercicio, mejorarás el carrito de compras de tu app de e-commerce para que los datos persistan incluso después de cerrar la app. Sigue estos pasos:

  1. En el contexto del carrito que ya creaste, añade funciones para guardar y cargar los items del carrito desde AsyncStorage.
  2. Usa useEffect para cargar los datos del carrito desde AsyncStorage cuando el componente se monte.
  3. Actualiza el estado del carrito cada vez que cambie, guardando los nuevos datos en AsyncStorage.
  4. Asegúrate de manejar posibles errores al acceder a AsyncStorage, como permisos o almacenamiento lleno.
  5. Prueba la persistencia cerrando y reabriendo la app para verificar que los items del carrito se mantengan.
Pistas
  • Recuerda que AsyncStorage es asíncrono, usa async/await o .then() para manejar las promesas.
  • Considera serializar los datos del carrito a JSON antes de guardarlos en AsyncStorage, y deserializarlos al cargarlos.
  • Usa un estado inicial vacío en el contexto hasta que los datos se carguen desde AsyncStorage para evitar errores.

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.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.