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

75
Views
React setState se está actualizando incorrectamente
const [cartItems, setcartItems] = useState([] as Product[]); const addItemToCart = (product: Product) => { setcartItems((preCartItems) => { const updatedcart = [...preCartItems]; if(!updatedcart.length) updatedcart.push(product) // updatedcart[0].price original value 1 updatedcart[0].price = updatedcart[0].price + 1 ; console.log(updatedcart[0].price); // prints 2 console.log(updatedcart); // printed object is saying price value 3 return updatedcart; }); };

No puedo entender cómo el valor se incrementa automáticamente en 1 y por qué el valor en el objeto da una salida diferente en comparación con el valor al que accede el operador de punto

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

0

El problema es que estás mutando tu estado dentro de setcartItems .

Haciendo const updatedcart = [...preCartItems]; no está copiando los objetos en preCartItems , solo está distribuyendo la referencia de los mismos objetos en una nueva matriz.

Entonces estás mutando el objeto aquí updatedcart[0].price = updatedcart[0].price + 1 ; .

Esto conducirá a dos versiones diferentes del estado, de ahí el resultado inconsistente.

Si desea copiar los objetos que debe hacer

 const updatedcart = preCartItems.map(item => ({ ...item }));

Esto devuelve una nueva matriz de nuevos objetos y puede realizar cualquier operación que desee con ellos. Esta forma de copiar una matriz de objetos también es superficial, solo funciona para 1 nivel de profundidad, si desea copiar también objetos anidados, necesita una función más robusta.

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!