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

105
Views
useEffect con función que actualiza el estado ya que la dependencia conduce a un bucle infinito

Caja de arena de código: https://codesandbox.io/s/new-breeze-d260k

El código:

  • Esta es una aplicación de autenticación simple
  • Cuando hace clic en Login , el token de acceso se intercambia y se almacena en la memoria, mientras que el token de actualización se almacena en localStorage.
  • Mientras el token de acceso es válido (aquí una marca de tiempo), la página de inicio muestra el contenido protegido
  • En cada recarga de página (es decir, inicialización de la aplicación), el token de actualización se envía al servidor y, si es válido, se intercambia un nuevo token de acceso.

El problema:

  • Para actualizar el token en la inicialización de la aplicación, tengo una función onRefreshToken() en un useEffect que se ejecutará una vez (quería pasar una matriz vacía como dependencia pero mecanografiado/eslint se queja y sugiere que onRefreshToken() debería ser la dependencia. Lo admito que no entiendo por qué se recomienda tener siempre una dependencia cuando se quiere que el efecto se ejecute una vez).
  • Una vez que se renueva el token, almaceno el token de acceso y el perfil de usuario en su contexto respectivo.
  • Comienza el bucle infinito de renderizado. En mi servidor local, esto se debe a setProfile() y no a setAccessToken() . Sin embargo, no entiendo por qué.

Nota al margen

El problema anterior es el problema principal de esta publicación, pero en una nota al margen, el proceso de inicio/cierre de sesión no se sincroniza entre pestañas, por lo que si tiene alguna idea de por qué, también me encantaría escuchar su consejo sobre este punto.

Feliz año nuevo

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

0

Una forma de solucionar esto sería verificar si tiene un token de acceso y solo actualizarlo si es necesario:

 export default function App() { const { accessToken } = useAuthContext(); const { onRefreshToken, onSyncLogin, onSyncLogout } = useAuth(); useEffect(() => { const refresh = async () => { await onRefreshToken(); }; !accessToken && refresh(); }, [onRefreshToken, accessToken]);
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!