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

273
Vistas
¿Por qué useState tiene este comportamiento y cómo puedo obtener un valor actualizado en la misma función donde configuro el valor? En react-nativo

Establecí el valor dentro de la función usando useState, en la misma función accedí al valor establecido pero no me da el valor actualizado. Si accedo a la función de valor establecido fuera, me da el valor actualizado. ¿Por qué useState tiene este comportamiento y cómo puedo obtener un valor actualizado en la misma función donde configuro el valor?

 export default function App() { const [value, setValue] = useState(1); const myFunction= ()=>{ setValue(2); console.log(value) //it gives me 1, but I need 2 as I set in above line } //but if I access the value outside myfunction it gives 2 console.log(value) // it gives 2 return( .... .... ) }
about 4 years ago · Santiago Gelvez
3 Respuestas
Responde la pregunta

0

useState cambiará el valor en el próximo renderizado, no inmediatamente. Si necesita usar el valor en alguna otra función, escuche los cambios de valor con un useEffect o almacene el nuevo valor en otra variable:

 export default function App() { const [value, setValue] = useState(1); const myFunction= ()=>{ // storing value I think it happens before rerender const newValue = 2 setValue(newValue) doOtherStuff(newValue); console.log(newValue); } // or listen for value changes this will be called after rerender useEffect(()=>{ doOtherStuff(value); console.log(value); },[value]) }
about 4 years ago · Santiago Gelvez Denunciar

0

Solo para dar un poco más de explicación:

El valor devuelto por useState se almacena como una variable regular. Cuando crea una instancia de myFunction , se vincula al cierre de ese procesamiento específico y a esa variable de value específica.

Para su caso, donde llama a setValue y luego necesita hacer algo con ese valor, la respuesta de PhantomSpooks es acertada: use una variable local para almacenar y distribuir el valor actualizado, o mueva esa lógica a useEffect (se aplican las advertencias habituales de useEffect en ese caso; puede ser asíncrono y puede ejecutarse nie veces).

La forma genérica de eludir esta limitación de useState es usar una referencia, como propone Chari, aunque no como está escrito en la respuesta; debe reemplazar el estado con la referencia, ya que establecer la referencia no activará la nueva representación.

Puede usar una referencia como almacenamiento secundario, así:

 const [value, setValue] = useState(1); // This sets only initial value for the ref. You have to be mindful of setting it explicitly when calling seValue. const liveValue = useRef(value); // A tempting option might be to just add a line liveValue.current = value; // but this is quite risky and may lead to subtle bugs, // as the ref won't be updated immediately on setValue, leading to // possible race conditions. function myFunction1() { // Better to update it manually setValue(newValue); liveValue.current = newValue; } function myFunction2() { // This will always use the last set value of liveValue.current. doSomething(liveValue.current); }

Como puede ver, useRef puede ser complicado, por lo que generalmente es mejor apegarse a la solución anterior, ya sea la variable local o useEffect , dependiendo de la semántica de lo que esté haciendo.

about 4 years ago · Santiago Gelvez Denunciar

0

Cuando se llama a console.log en su myFunction todavía el value=1 . Aunque lo haya configurado antes, el valor actualizado no se pasa al registro. Console.log antes de que se ejecute la devolución cuando se llama a setValue (renderizar) En el momento en value=2 .

Puede usar useRef para obtener valores actualizados sin volver a renderizar. Use valores de estado (variables) solo para mostrar cambios en la interfaz de usuario.

 export default function App() { const value = useRef(1); const myFunction= ()=>{ value.current = 2; console.log(value.current) } console.log(value.current) return( .... .... ) }
about 4 years ago · Santiago Gelvez 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