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 }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.
haz eso para actualizar el estado de res
setRes({...res, ...respond});