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

95
Views
Devolver un valor que se encuentra actualmente en el estado prometido

Entonces, esta es más una pregunta de javascript que una pregunta de reactjs. Estoy creando una ruta protegida en reactjs. En esto, estoy obteniendo la solicitud de obtención '/checkauth' para verificar la autenticación y me devuelve correctamente la respuesta. Sin embargo, el problema es que, dado que es una función asíncrona, lleva tiempo devolver ese valor y, por lo tanto, mi declaración de devolución se ejecuta antes. Este es el código con el que estoy teniendo problemas.

 const [auth, setAuth] = useState(); const checkAuthentication = async ()=>{ const res = await fetch('/checkauth', { method : "GET", credentials: "include", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', } }); const data = await res.json(); return res.status===200 ? (data.isAuthenticated) : (false) ; } useEffect(async ()=>{ const data = await checkAuthentication(); setAuth(data) }, []); return auth ? <Outlet /> : <Navigate to='/signin' />;

Aquí, la autenticación siempre está indefinida y, por lo tanto, siempre navega hacia la firma.

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

0

Usa tres estados.

 const [auth, setAuth] = useState("loading");

...

 setAuth(data ? "auth" : "not-auth");

...

 if (auth === "loading") return <Loading /> else if (auth === "not-auth") return <Navigate to='/signin' /> else return <Outlet />
about 4 years ago · Juan Pablo Isaza Report

0

Puede devolver un indicador de carga mientras obtiene los datos, y cuando la solicitud se complete, el estado se actualizará y se representará el componente <Outlet /> .

Por cierto: cuando pasa una función asíncrona al gancho useEffect, devuelve una promesa y useEffect no espera que la función de devolución de llamada devuelva Promis e, sino que espera que la devolución de llamada no devuelva nada (indefinido) o una función (típicamente una función de limpieza).

Prueba esto:

 useEffect(() => { // declare the async data fetching function const fetchData = async () => { // get the data from the api const data = await fetch('https://yourapi.com'); // convert the data to json const json = await response.json(); // set state with the result setData(json); } // call the function fetchData() // make sure to catch any error .catch(console.error);; }, [])
  • Más información:

React Hook Warnings para la función asíncrona en useEffect: la función useEffect debe devolver una función de limpieza o nada

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!