Contenido del curso
Enrutamiento y estructura base
- 2

Instalación de Vite y Tailwind en React
07:07 min - 3

Análisis de rutas y componentes en React
14:09 min - 4

Rutas en React con React Router Dom
08:20 min - 5

Componente Navbar
19:53 min - 6

Componente Layout para todas las vistas
08:17 min - 7

Componente de Card
14:13 min - 8

Consumiendo la FakeStore API para pintar cards
24:47 min
Manejo de estado global con Context
Carrito de Compras
Checkout y Órdenes de Compra
Filtrando productos desde el frontend
Próximos pasos
Visualizar la última orden en My Order
Resumen
Aprender a mostrar el detalle de una orden recién creada en una vista independiente es uno de los pasos clave al construir un e-commerce con React. Aquí verás cómo enlazar el botón de checkout con la página My Order, leer los datos desde un context global y renderizar las tarjetas de productos comprados.
Cómo enlazar el botón de checkout con la vista My Order
El primer reto es convertir el botón que ejecuta el checkout en un enlace que también redirija al detalle de la última orden. Para eso, React Router Dom trae el componente Link, que envuelve el botón sin perder su funcionalidad.
La importación se hace en la parte superior del componente, justo después de las importaciones de React:
jsx import { Link } from 'react-router-dom'
Luego encapsulas el botón dentro del Link y defines la ruta de destino, que en este caso apunta a /my-orders/last. Ese sufijo last es la pista que usaremos después para mostrar la orden más reciente.
¿Qué hace el componente Link de React Router Dom? Convierte un elemento en un enlace de navegación interna sin recargar la página, manteniendo el estado de la aplicación.
Cómo registrar la ruta dinámica en el index de rutas
Si al hacer clic en checkout aparece un not found, significa que la ruta /my-orders/last aún no existe en el archivo principal de rutas. La solución es registrarla apuntando al componente MyOrder.
Dentro del archivo de rutas duplicas la entrada existente y le indicas que cuando la URL sea /my-orders/last, debe renderizar MyOrder. Con eso ya tienes la página visible al ejecutar el checkout.
Cómo leer la orden desde el shopping cart context
El componente MyOrder necesita acceder al estado global donde se guardan las órdenes. Para eso importas useContext de React y el ShoppingCartContext que ya está definido en el proyecto.
Dentro del componente extraes el contexto así:
jsx const context = useContext(ShoppingCartContext)
Esto te da acceso a context.order, que es el array donde se almacenan todas las órdenes generadas.
Cómo mostrar solo la última orden con slice
La idea es que MyOrder muestre únicamente la compra más reciente, no el historial completo. Aquí entra el método slice, que permite extraer una porción de un array sin modificar el original.
context.order.slice(-1)devuelve un array con el último elemento.[0]accede a ese objeto único dentro del array.- Sobre ese objeto se accede a la propiedad
products. - Con
.map()se itera para renderizar cada tarjeta.
El encadenamiento queda así: context.order.slice(-1)[0].products.map(...). Sin el [0] y el acceso a products, React intenta renderizar un objeto completo y lanza el error de que algo is not a function.
¿Para qué sirve slice(-1) en JavaScript? Extrae el último elemento de un array y lo devuelve dentro de un nuevo array, sin modificar el original.
Cómo reutilizar OrderCard sin el botón de eliminar
La misma tarjeta que aparece en el CheckoutSideMenu se reutiliza en MyOrder, pero con una diferencia: aquí no tiene sentido eliminar productos, porque la compra ya se concretó.
La estrategia es renderizar el ícono de eliminar de forma condicional según si se recibe la prop handleDelete. Dentro de OrderCard se declara una variable que guarda el ícono solo cuando esa prop existe:
jsx let renderXMarkIcon if (handleDelete) { renderXMarkIcon = <XMarkIcon ... /> }
Luego, en el JSX, se inserta {renderXMarkIcon} en el lugar donde antes estaba el ícono fijo. Resultado: en el checkout lateral aparece la X para eliminar, pero en la vista de orden final no.
Cómo limpiar el estilo del contenedor de productos
El contenedor original tenía overflow con scroll porque vivía dentro de un menú lateral estrecho. En MyOrder hay espacio de sobra, así que conviene quitar el scroll y ajustar el layout.
Los estilos quedan reducidos a:
flexpara activar flexbox.flex-colpara apilar las tarjetas en columna.w-80para fijar el ancho del listado.
Con eso la lista de productos comprados se ve limpia, sin barras de desplazamiento innecesarias.
Cómo depurar cuando la orden no se renderiza
Un truco práctico durante este flujo es comentar el bloque de renderizado y agregar un console.log(context.order) para ver qué llega realmente desde el contexto.
Al inspeccionar el objeto encuentras propiedades como date, products, totalPrice y totalProducts. Confirmar que products existe es lo que te indica que debes acceder a esa propiedad antes de hacer .map(). Es un paso pequeño que ahorra mucho tiempo cuando aparece un error genérico.
¿Qué te ha costado más al trabajar con context y rutas dinámicas en React? Cuéntalo en los comentarios.