Suma total de productos en el carrito
Clase 20 de 31 • Curso de React.js con Vite.js y TailwindCSS
Contenido del curso
Clase 20 de 31 • Curso de React.js con Vite.js y TailwindCSS
Contenido del curso
SANDRO SIMON
Humberto Asca
Rubén Ernesto Aragón Gil
Andres Eduardo Maneiro Antunez
JOSE FABIAN BONILLA GUZMAN
Andrés Julian Caro Restrepo
Jhon Eduard Bocanegra Ortiz
Juan Mercado
Abraham Gonzalez
Rubén Ernesto Aragón Gil
Bryan Enrique Garay Benavidez
Jose Pabon
Amanda Limón
Emilio Nicolás Mendoza Patti
Daniel Morales
Julián Muñoz
Sebastián Andrés Sanhueza Tapia
William Armando Forero Bermeo
Humberto Cruz
Kengya Moncada
Miguel Angel Reyes Moreno
Gianluca Enzo Procopio
Andres Felipe Camacho Rodriguez
Irving Juárez
William Armando Forero Bermeo
Fernando de Leon Gil
Andres Felipe Bravo Hernandez
Otra alternativa es usar reduce, así:
return products.reduce((sum, product) => sum + product.price)
export const totalPrice = (products) => { return products.reduce((sum, product) => sum + product.price, 0) }
Me sirve, están muy óptimos los que comparten. Gracias.
yo cree un custom hook que se encarga de manejar todo lo relacionado con el carrito de compra
import { useState } from 'react' export const useShoppingCart = () => { const [cart, setCart] = useState([]) const [totalQuantity, setTotalQuantity] = useState(0) const [totalPrince, setTotalPrince] = useState(0) const [isCheckoutSideMenuOpen, setIsCheckoutSideMenuOpen] = useState(false) //Funciones que se encargan de abrir y cerrar el menu laterial de las ordenes const openCheckoutSideMenu = () => setIsCheckoutSideMenuOpen(true) const closeCheckoutSideMenu = () => setIsCheckoutSideMenuOpen(false) //Agrega un producto al carrito, y si ya existe aumenta la cantidad y suma los productos const addProduct = payload => { const productIndex = cart.findIndex(product => product.id === payload.id) let newCart = [] if (productIndex >= 0) { newCart = [...cart] newCart[productIndex].quantity++ newCart[productIndex].price = payload.price + newCart[productIndex].price } else { newCart = [...cart, { ...payload, quantity: 1 }] } setCart(newCart) getTotalInfo(newCart) openCheckoutSideMenu() } const deleteProduct = (id) => { console.log(id) const newCart = cart.filter(product => product.id !== id) setCart(newCart) } const showCartList = () => { return cart } const getTotalQuantity = (data) => { const quantity = data.reduce((total, product) => total + product.quantity, 0) setTotalQuantity(quantity) } const getTotalPrice = (data) => { const price = data.reduce((total, product) => total + product.price, 0) setTotalPrince(price) } const getTotalInfo = (data) => { getTotalQuantity(data) getTotalPrice(data) } return { cart, addProduct, deleteProduct, showCartList, totalQuantity, totalPrince, isCheckoutSideMenuOpen, openCheckoutSideMenu, closeCheckoutSideMenu } }
realice lo mismo xd y en el componente card le dije que si da click en el mas que sume el precio al custom, se considera buena o mala practica
< context.setTotalCart(context.totalCart+newItem.price); >
Hola a todos! les comparto como integré la funcionalidad de añadir más cantidades de productos al carrito, además de calcular el total de cada producto dependiendo de su cantidad. También se encuentran ordenados alfabéticamente para evitar que al darle click se muevan de su puesto:
Cualquier oportunidad de mejora se agradece! 🤠
Esta fue mi solucion:
const totalPrice = (array) => { let total = 0 let prices = array.map(product => product.price) prices.forEach(price => total += price) return total }
El comentario que usa la profesora en la función totalPrice es un estándar llamado JSDoc, se los recomiendo si quieren tener su código ordenado y además ayuda al IDE (VSCode o PHPStorm) a mejorar las sugerencias.
Con base a los comentarios de los pares: Sandro y Humberto, le pregunté a la IA y me sugirió este código para utiles/index.js:
export const totalPrice = products => products.reduce((sum, {price}) => sum + price, 0);
Hola comunidad! Preparé un Order Card pero con otras funcionalidades como pueden ver en la imagen. Se puede aumentar y disminuir la cantidad de un producto, hice cambios en el contexto y trate de dejar un diseño bonito para el componente (me tomó horas, soy principiante en Tailwind y CSS). Les dejo mis apuntes, el código y el paso a paso hecho en Notion. Espero les sea de utilidad. Link aquí: https://bg99astro.notion.site/Order-Card-641bb8875a3e47fca133b2dceae40b84
Gracias, me ayudo tu aporte.
Muy bien explicado todo, me ayudó bastante!!
Mi solucion:
const accumulate = (acc, value ) => acc + value.price export const totalPrice = (products) => { return products.reduce(accumulate, 0) }
por si quieren aprender mas de reduce les dejo este link https://youtu.be/tP8JiVUiyDo?t=1070
Gracias por el aporte, me sirvió mucho para entender el .reduce()
Pregunta sobre el uso de totalPrice ¿No estaría en la renderización llamándolo constantemente?
Sé que tal vez ni se note al ser algo chiquito y que vive cambiando pero ¿Qué onda con eso?
Vamos bien
Se ve muy bien Sebas!
me tomo varias horas ver como lograba que se agregara el valor de quantity a la información del cartProducts y visualizar tanto el total de un solo producto como del total gloval, ya que le agregé un input number para poder modificar la cantidad de productos, pero luego de tanto esfuerzo acá esta el resultado 😊😎.
/** * This function calculates Total price of a new order * @param {Array} products * @returns {number} Total price */ export const TotalPrice = (products) => products.reduce((sum, product) => sum + product.price, 0);
Antes de ver el resto de la clase:
export const calculateTotalPrice = (products) => { return products.reduce((total, product) => { return total + product.price }, 0) }
Yo lo hice con el método de array "reduce" :
export const totalPrice = (products) =>{ return products.reduce((acc, product) => acc + product.price, 0); }
Genial
Curiosa la imagen de 'generic fresh chips', no sabia que asi se veian una papas genericas
Yo solucione el algoritmo de calcular el total a partir de reduce
export const totalPrice = (products) => { const prices = products.map((product) => product.price); return prices.reduce((productA, productB) => productA + productB, 0);};
Una locura este curso, hasta ahora se convirtió en mi favorito, se siente tan bien poder crear estas cosas tan fácilmente y lo mejor poder entender los conceptos rápidamente.
Mi solucion:
const totalOrder = useMemo( () => cart.reduce((prev, product) => prev + product.price, 0), [cart], );