Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

138
Visualizações
usando setState con una matriz de objetos

Tengo un estado con dos productos como este:

 const [product, setProduct] = useState([ { name: 'Hat', description: 'Nice cartoon hat', images: [ 'linktoimage', ], amount: 799, currency: 'eur', quantity: 0, }, { name: 'Gift', description: 'Nice cartoon gift', images: [ 'linktoimage', ], amount: 599, currency: 'eur', quantity: 0, }, ]);

Quiero mostrarlos, así que uso un mapeo regular:

 <div className='product'> {product.map((p) => ( <div> <h3>{p.name}</h3> <h4> Stripe Amount:{' '} {(p.amount / 100).toLocaleString('en-US', { style: 'currency', currency: 'EUR', })} </h4> <img src={p.images[0]} width='250px' alt='product' /> <span style={{ margin: '20px', fontSize: '2em' }}> {p.quantity} </span> <button className='btn btn-sm btn-success' onClick={() => { setProduct([...p, (p.quantity = Math.max(0, p.quantity + 1))]); }} > + </button> </div> ))}

Tengo dificultades para cambiar la cantidad (mi último botón), todo lo que quiero es cambiar la cantidad de productos, pero no puedo hacerlo de alguna manera.

probado así:

 onClick={() => {setProduct([...p, (p.quantity = Math.max(0, p.quantity + 1))]); }}

dice que p no es iterable, hice otra cosa pero cuando incrementé mi otro producto desapareció, supongo que es porque configuré productState en ...p.

¿Cómo puedo incrementar el producto p dado sin perder mi otro producto en mi estado?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Sugeriría incrementar la quantity fuera del setProduct y luego establecer el estado:

 onClick={() => { let result = [...product]; result = result.map((x) => { x.quantity = Math.max(0, x.quantity + 1); return x; }); setProduct(result); }}
about 4 years ago · Juan Pablo Isaza Relatório

0

p se refiere a un producto individual, mientras que su product estatal se refiere a la lista de todos los productos, por lo que para actualizar un elemento y mantener el resto de la lista igual, primero debe difundir product y luego difundir su artículo específico.

 onClick={() => setProduct([...product, {...p, quantity: p.quantity + 1}])}
about 4 years ago · Juan Pablo Isaza Relatório

0

Esta es una forma que puede hacer para actualizar la cantidad de elemento:

 ... {product.map((p, indx) => ( ... <button className='btn btn-sm btn-success' onClick={() => { const updateProducts = product updateProducts[indx].quantity += 1 setProduct([...updateProducts]) }} > + </button> }} ))
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda