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

65
Views
Acceda al valor clave del objeto de estado anterior useState

Busqué sobre el desbordamiento de la pila pero no encontré ninguno similar (simplemente reemplace un valor clave de objeto sin usar el valor anterior).

Considere un gráfico declarado con useState

 const [graphBounds, setGraphBounds] = useState(graphBoundsInitialValue);

Dónde

 const graphBoundsInitialValue = { left: Number.MAX_SAFE_INTEGER, right: 0, top: 0, bottom: Number.MAX_SAFE_INTEGER };

Izquierda y derecha son para el eje X e inferior y superior son para el eje Y respectivamente.

Puedo tener 1 o más gráficos y para todos ellos necesito obtener el mínimo X, el mínimo Y, el máximo X, el máximo Y para mostrarlos correctamente

Necesito cambiar uno de los parámetros de graphBounds de acuerdo con el nuevo valor del servidor almacenado en la variable del graph y en función del valor anterior de ese parámetro.

Intenté muchas cosas como

 setGraphBounds(prev => ({...prev, top : prev.top > graph.maxY ? prev.top : graph.maxY}));

El problema es que intellijIdea se queja de ese código y no me deja. Probé [] corchetes y así sucesivamente, pero sin suerte.

He terminado algo como esto:

 const updatedTop = graphBounds.top > graph.maxY ? graphBounds.top : graph.maxY; let updatedBottom = graphBounds.bottom < graph.minY ? graphBounds.bottom : graph.minY || 0; // bottom domain always above zero updatedBottom = updatedBottom > 0 ? updatedBottom : 0; const updatedLeft = graphBounds.left < graph.minX ? graphBounds.left : graph.minX; const updatedRight = graphBounds.right > graph.maxX ? graphBounds.right : graph.maxX; setGraphBounds({top: updatedTop, bottom: updatedBottom, left: updatedLeft, right: updatedRight});

Este código siempre se ejecuta cuando llegan nuevos datos y compara el nuevo valor del gráfico con el anterior.

Todavía tengo una sensación molesta de código no optimizado.

PD

PERO si me atrevo a hacerlo, seguirá siendo 4 llamadas no optimizadas (sí, en un lote, pero lo que sea) como

para izquierda: setGraphBounds(prev => ({...prev, left : prev.left > graph.minX ...

por la derecha: setGraphBounds(prev ...

para arriba: setGraphBounds(prev...

para abajo: setGraphBounds(prev...

Cualquier sugerencia es apreciada. Gracias por adelantado

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

0

Puede enfrentar algunos problemas porque no está accediendo al estado actual graphBounds , ejemplo aquí:

 const updatedTop = graphBounds.top > graph.maxY ? graphBounds.top : graph.maxY;

El valor de graphBounds no siempre es el valor actual.

Al usar la devolución de llamada en lugar del objeto, tendrá acceso a la última versión de su estado graphBounds :

 setGraphBounds((graphBounds) => { const updatedTop = graphBounds.top > graph.maxY ? graphBounds.top : graph.maxY; const updatedBottom = graphBounds.bottom < graph.minY ? graphBounds.bottom : graph.minY || 0; // bottom domain always above zero updatedBottom = updatedBottom > 0 ? updatedBottom : 0; const updatedLeft = graphBounds.left < graph.minX ? graphBounds.left : graph.minX; const updatedRight = graphBounds.right > graph.maxX ? graphBounds.right : graph.maxX; return { top: updatedTop, bottom: updatedBottom, left: updatedLeft, right: updatedRight, }; });
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!