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

170
Views
¿Por qué mi función onclick no funciona en el primer clic?

Estoy creando una tienda de zapatillas donde tengo una función de agregar al carrito,

primero, cuando se hace clic en agregar al carrito, se actualiza el tamaño seleccionado, segundo, agrega el artículo modificado,

objeto en el carrito Indicar que el problema es que en el primer clic no se devuelve ningún objeto, pero

cada vez que después del primer clic devuelve los datos.

esta es la función que actualiza el tamaño:

 const updateSelectedSize=(item,selectedSize)=>{ item.size=selectedSize; return item; }

aquí está la función que uso para agregar el artículo actualizado al carrito:

 const handleAddtoCart=(item,selectedSize)=>{ const updatedItem=updateSelectedSize(item,selectedSize); let newitemArray=[...cart,updatedItem] setcart(newitemArray) console.log(cart); }

aquí está el componente que ejecuta la función al hacer clic:
<i onClick={()=>{handleAddtoCart(product,selectedSize)}}className="fa-solid fa-cart-arrow-down"></i>

aquí está el archivo console.log del primer clic: ingrese la descripción de la imagen aquí

y aquí está el registro de la consola del segundo clic: ingrese la descripción de la imagen aquí

como puede ver, no sucede nada en el primer clic, creo que esto tiene algo que ver con la variable del carrito useState y el operador de propagación, el valor inicial es:

 const [cart, setcart] = useState('');

Intenté establecer el valor en diferentes cosas, como una matriz vacía, pero siempre da el mismo resultado.

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

0

Porque escribe su console.log(cart) dentro del handleAddtoCart y su estado aún no se ha actualizado.

si mueve console.log (tarjeta) fuera de la función handleAddtoCart , puede ver que el resultado funciona perfectamente.

Y para una matriz vacía es mejor usar

 ✅ const [cart, setcart] = useState([]);

en lugar de este

 ❌ const [cart, setcart] = useState("");

El código completo está aquí

 export default function App() { const [cart, setcart] = useState([]); const updateSelectedSize = (item, selectedSize) => { item.size = selectedSize; return item; }; const handleAddtoCart = (item, selectedSize) => { const updatedItem = updateSelectedSize(item, selectedSize); let newitemArray = [...cart, updatedItem]; setcart(newitemArray); console.log("STATE NOT UPDATED YET", cart); }; console.log("STATE UPDATED", cart); return ( <div className="App"> <i onClick={() => { handleAddtoCart({ size: 3 }, 2) }}> CLICK TO SET </i> </div> ); }

Mejor.

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!