Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

96
Views
¿Cómo paso accesorios mapeados a un componente usando useState?

Tengo un componente de carrito de compras al que pasé un accesorio useState para actualizar la cantidad de artículos dentro del carrito de compras/la cantidad de dinero que vale el carrito:

 import { data } from "./data"; export default function StoreItems({ addToCart, Total, setTotal }) { const addToTotal = (data) => { addToCart(); setTotal(Total + data.price); }; return ( <Grid container spacing={3}> {data.map((data) => ( <Grid item key={data.id} xs={12} sm={6} md={3}> <Card> <CardMedia image={data.image} /> <CardActions> <div> <Button>Buy</Button> <Button size="small" sx={{ marginLeft: "5px" }} onClick={addToTotal} > Add to Cart </Button> </div> </CardActions> </Card> </Grid> ))} </Grid> ); }

Los datos son una matriz de JavaScript con objetos que se parece a:

 export const data = [ { id: 1, title: "item 1", content: `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ac aliquam nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.`, image: "https://source.unsplash.com/random/1", price: 5000, }, ];

Y los accesorios se transmiten de:

 function Store() { const [cartCount, setCartCount] = useState(0); const [Total, setTotal] = useState(0); const addToCart = () => { setCartCount(cartCount + 1); }; return ( <> <div> <StoreItems Total={Total} setTotal={setTotal} addToCart={addToCart} /> </div> </> ); } export default Store;

¿Por qué no puedo agregar el precio de data.price al objeto useState - Total?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Hay un problema con la forma en que usa addToTotal en el componente StoreItems . Primero, la función espera que se pase un elemento de la matriz de data , pero no lo hace explícitamente. En su implementación, la función obtiene un evento de clic en lugar de un elemento de matriz de data . En segundo lugar, es mejor cambiar el nombre del primer argumento en la función de flecha del map porque confunde la matriz de data con sus elementos. Así es como necesita actualizar el componente para que todo funcione:

 import { data } from "./data"; export default function StoreItems({ addToCart, Total, setTotal }) { const addToTotal = (item) => { addToCart(); setTotal(Total + item.price); }; return ( <Grid container spacing={3}> {data.map((item) => ( <Grid item key={item.id} xs={12} sm={6} md={3}> <Card> <CardMedia image={data.image} /> <CardActions> <div> <Button>Buy</Button> <Button size="small" sx={{ marginLeft: "5px" }} onClick={() => addToTotal(item)} > Add to Cart </Button> </div> </CardActions> </Card> </Grid> ))} </Grid> ); }

Aquí hay un patio de juegos simplificado con la solución: https://stackblitz.com/edit/stackoverflow-71871965?file=src%2FStoreItems.js

about 4 years ago · Juan Pablo Isaza Report

0

Primero cambia esto: data.map((data) => ....

a esto :

 data.map((item) => ....

Debe pasar el precio a la función onClick:

 <Button size="small" sx={{ marginLeft: "5px" }} onClick={() => addToTotal(item.price)}> Add to Cart </Button>

y luego cambie la función addToTotal a esto:

 const addToTotal = (price) => { addToCart(); setTotal(Total + price); };
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!