Para calcular el precio real de los elementos añadidos al carrito y poder mostrar la información correctamente, trabajaremos sobre MyOrder y OrderItem.
// OrderItem.jsx
import React from 'react';
const OrderItem = ({ product }) => {
return (
<div className="OrderItem">
<figure>
<img src={product.images[0]} alt={product.title} />
</figure>
<p>{product.title}</p>
<p>{product.price}</p>
<img src={icon_close} alt="close" />
</div>
);
}
export default OrderItem;
Primero, en OrderItem recordemos que desde MyOrder le estabamos pasando el producto. Sin embargo, en todos los casos estábamos mostrando una bicicleta. Ahora, para poder mostrar la información de cada producto, simplemente le indicamos al componente que recibimos como parámetro un product. Después, editamos el HTML, para que la imágen, título y precio correspondan al del producto, así que solamente accedemos a las propiedades de cada uno.
// MyOrder.jsx
const MyOrder = () => {
const { state } = useContext(AppContext);
const sumTotal = () => {
const reducer = (accumulator, currentValue) => accumulator + currentValue.price;
const sum = state.cart.reduce(reducer, 0);
return sum;
}
return (
<div className="order">
<p>
<span>Total</span>
</p>
<p>${sumTotal()}</p>
</div>
);
}
export default MyOrder;
Ahora, editemos el componente MyOrder. En my order, creamos una función llamada sumTotal donde creamos la lógica de la suma de los precios de los productos del carrito. Para poder crear esta función, primero creamos la función llamada reducer, en la cual le pasamos dos valores, un acumulador y un valor corriente, para después regresar la suma de ambos. Después, en la constante sum, usamos el método reduce para los arrays. El método se aplica sobre el array state.cart con todos estos elementos. Simplemente, le pasamos la función antes definida, y un valor inicial igual a cero. Por último, regresamos sum. Más abajo, en la etiqueta p, entre llaves indicamos que se ejecute esta función para calcular el precio cada vez que se renderice el componente.
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.