• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

153
Views
¿Por qué el estado de React no se actualiza correctamente?

Estoy haciendo un juego de matemáticas y me gustaría que el rango de los operandos se actualice después de una cierta cantidad de preguntas. Tengo este código para establecer la dificultad.

 const [difficulty, setDiff] = useState({rangeA:[1, 10], rangeB:[1, 10]}); function setDifficulty(op) { let rangeA = []; let rangeB = []; if (question < 5) { //question state is incremented everytime the answer is correct, which triggers the next question rangeA = [0, 100]; rangeB = [0, 10]; } else if (question < 8) { rangeA = [0, 100]; rangeB = [0, 100]; } setDiff({...difficulty, rangeA, rangeB}); console.log(rangeB, difficulty.rangeB); // when question is 5, this logs [0, 100] [0, 10], but they should be the same value [0,100] }

pero el estado no se actualiza correctamente, que puede estar pasando?

almost 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Establecer el estado en React actúa como una función asíncrona.
Lo que significa que cuando configura el estado y coloca un console.log justo después, es probable que se ejecute antes de que el estado haya terminado de actualizarse.

Es por eso que tenemos useEffect , un enlace React incorporado que activa una devolución de llamada cuando una de sus dependencias ha cambiado.

Ejemplo:

 useEffect(() => { console.log(difficulty) // Whatever else we want to do after the state has been updated. }, [difficulty])

Este console.log se ejecutará solo después de que el estado haya terminado de cambiar y se haya producido un procesamiento.

  • Nota: la "dificultad" en el ejemplo es intercambiable con cualquier otra pieza de estado con la que estés tratando.

Consulte la documentación para obtener más información.

almost 3 years ago · Santiago Trujillo Report

0

Cuando llamas a setDiff , el nuevo valor de difficulty se actualizará durante el próximo renderizado. Dado que está iniciando sesión en console.log dentro de la función setDifficulty , antes de que ocurriera el renderizado, la referencia a difficulty.rangeB aún mantiene el valor antes de la actualización.

almost 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error