Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

120
Vistas
Iteración Reaccionar al hacer clic

Quiero hacer un contador onClick pero tengo un problema con el contador iterando correctamente. En la aplicación hay 3 "productos" y después de hacer clic en el botón "Agregar al carrito", el estado del objeto se actualiza pero todos los productos se generan por separado. Creo que ese es el problema de que el contador es diferente para cada uno de los productos o todo funcionará correctamente si levanto el estado, pero el archivo console.log se genera recientemente para todos los productos. No estoy muy seguro, así que necesito ayuda con eso.
Aquí hay un código en el orden del padre al último hijo :

 import { useEffect, useState } from "react"; import ProductList from "./ProductList"; const Products = () => { const [products, setProducts] = useState (null); useEffect (() => { fetch('http://localhost:8000/products') .then(res => { return res.json(); }) .then(data => { setProducts(data); }) }, []); return ( <div className="ProductList"> {products && <ProductList products={products}/>} </div> ); } export default Products;
 import Card from "./Card"; const ProductList = (props) => { const products = props.products; return ( <div className="ProductList" > {products.map((product) => ( <Card product={product} key={product.id} />))} </div> ); } export default ProductList;
 import { useState } from "react"; const Card= ({ product }) => { const [showDescription, setShowDescription] = useState(false); const [CartCounter, setCartCounter ] = useState(0); console.log(CartCounter); return ( <div className="Product-Preview" > <div className="backdrop" style={{ backgroundImage: `url(${product.image})` }}></div> <h2>{product.title}</h2> <div>{product.price}</div> <button className="ShowDescription" onClick={() => setShowDescription(!showDescription)}>Details</button> <button className="AddToCart" onClick={() => setCartCounter(CartCounter + 1)}>Add To Cart </button> {showDescription && <p>{product.description}</p>} <br /> </div> ); }; export default Card;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Ok, desea realizar un seguimiento de un valor agregado. Enumeraré el código en algún nivel alto.

 const ProductList = () => { const [count, setCount] = useState(0) const addOrRemove = n => { setCount(v => v + n) } return products.map(p => <Card addOrRemove={addOrRemove} />) } const Card = ({ addOrRemove }) => { // optional if you want to track card count // const [count, setCount] = useState(0) return ( <> <button onClick={() => { addOrRemove(1) }>Add</button> <button onClick={() => { addOrRemove(-1) }>Remove</button> </> ) }

Esencialmente, ya sea que rastree el conteo local o no, debe dejar que el padre decida cuál es el conteo final; de lo contrario, habrá algún problema de sincronización entre el niño y el padre.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda