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

169
Vistas
¿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 Respuestas
Responde la pregunta

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 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