Tengan mucho cuidado sobre cómo escriben su reduce, ese ‘,0’ estuvo en el lugar incorrecto y me hizo un desorden con el total del precio.
Construyendo el Carrito de Compras: Agregar productos al carrito
useEffect reemplaza los ciclos de vida de React.
Cart.js:
import React, { useContext, useEffect, useState } from 'react';
import { Link } from 'gatsby';
import { Button, StyledCart } from '../styles/components';
import priceFormat from '../utils/priceFormat';
import { CartContext } from '../context';
export default function Cart() {
const { cart } = useContext(CartContext);
const [total, setTotal] = useState(0);
const getTotal = () => {
setTotal(cart.reduce((acc, current) => acc + current.unit_amount * current.quantity , 0));
};
useEffect(() => {
getTotal();
}, []);
return (
<StyledCart>
<h2>Carrito de compras</h2>
<table>
<tbody>
<tr>
<th>Producto</th>
<th>Precio</th>
<th>Cantidad</th>
<th>Total</th>
</tr>
{cart.map(swag => (
<tr key={swag.id}>
<td>
<img src={swag.metadata.img} alt={swag.name}/> {swag.name}
</td>
<td>USD {priceFormat(swag.unit_amount)}</td>
<td>{swag.quantity}</td>
<td>{priceFormat(swag.quantity * swag.unit_amount)}</td>
</tr>
))}
</tbody>
</table>
<nav>
<div>
<h3>Subtotal: </h3>
<small>Total: USD {priceFormat(total)}</small>
</div>
<div>
<Link to='/'>
<Button type='outline'>Volver</Button>
<Button disabled={cart.length === 0}>Comprar</Button>
</Link>
</div>
</nav>
</StyledCart>
)
};
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?