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

182
Vistas
useState ejecutándose antes que otra función

Estoy tratando de setRes() como respuesta, que es el resultado de una solicitud de inicio de sesión, pero Res no está configurado. Esta es la función:

 const [res, setRes] = useState({ auth: false, type: '', reason: '' }) const Handlelogin = async (e) => { e.preventDefault(); const respond = await login(e) setRes(respond) }

responder debe devolver un objeto como este:

 result={auth:false, reason:"Wrong Credentials!",type:'error' };

o

 result={auth:true, type:response.data.auth};

Probé console.log() para responder y el resultado es correcto, pero setRes(responder) no funciona. ¿Algunas ideas?

El jsx:

 {res.auth === false ? <Login/> : res.type ==='admin' ? <Admin/>: res.type==='fs' ? <Fs/> : <WebMail/>}

¿Es esta la forma correcta de autenticarse?

código de inicio de sesión:

 import axios from "axios"; let result={}; export const login=async (e)=>{ e.preventDefault(); const data={username:e.target[0].value,password:e.target[1].value} await axios .post("http://localhost:3001/api/Login", data) .then(await function (response) { if(response.data.auth===false){ return result={auth:false, reason:"Wrong Credentials!",type:'error' }; } else if(response.data.auth==="Network Error"){ return result={auth:false,reason:"Please check your network connection!",type:'error'} } else if(response.data.auth==='normal'){ window.location.href=response.data.to } else if(response.data.auth==='admin'){ return result={auth:true, type:response.data.auth}; } else if(response.data.auth==='fs'){ return result={auth:true, type:response.data.auth}; } }) .catch((error)=>{ result={auth:false,reason:"Network Error"} }); return result }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

A partir de su pregunta, no está claro si está convirtiendo la respuesta a json invocando .json() en la respuesta de la API. Tal vez lo estés haciendo en login(). Comparta el código para iniciar sesión y la salida de console.log() de responder.

Mi sugerencia sería eliminar await desde el controlador de promesa then(). Esa función solo se invocaría una vez que la respuesta esté disponible. Puede reestructurar su manejo de llamadas y respuestas de Axios según la respuesta aceptada aquí Reestructuración de respuesta de Axios

No veo ningún otro problema con su código. Sería muy útil si pudiera crear una aplicación de muestra para depurar aún más el problema.

about 4 years ago · Juan Pablo Isaza Denunciar

0

haz eso para actualizar el estado de res

 setRes({...res, ...respond});
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