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

103
Vistas
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 Respuestas
Responde la pregunta

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 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