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

129
Views
Nextjs UseEffect no se procesa en el cambio de ruta

Tengo un problema con un efecto de uso dentro de un componente que está en cada componente. Realicé algunas autenticaciones y redireccionamientos en ese componente, pero pensé que cuando uso el enlace Nextjs o el botón de retroceso del navegador, el Layout useEffect no se vuelve a representar, lo que significa que no verifica si el usuario ha iniciado sesión, por ejemplo.

aquí está mi componente de diseño

 const Layout = ({ children }) => { const router = useRouter() const { setAuthenticated, userFromDB, setUserFromDB, setIsVender, isVender } = useContext(AuthContext) //cuando hacemos un login el token se guarda en el local storage asi que comprobamos que exista useEffect(() => { const checkToken = async () => { const token = localStorage.getItem('FBIdToken') if (token) { const decodedToken = jwtDecode(token); //si la fecha de expiracion del token supero a la actual, redirect al login if (decodedToken.exp * 1000 < Date.now()) { setAuthenticated(false) router.replace('/login'); } else { if(!userFromDB){ const user = await getUser(decodedToken.user_id); //si encontro un usuario, lo asignamos al context api if(user){ console.log(user) // obtenemos el objecto con los datos del usuario y seteamos en el context si es vendedor o no if(typeof user.isVender !== undefined){ user.isVender ? setIsVender(true) : setIsVender(false); } setUserFromDB(user); } setAuthenticated(true) } } console.log('ejecutando'); } else { if(router.pathname !== "/" && router.pathname !== "/download-app" && router.pathname !== "/register" && router.pathname !== "/login" ) { console.log(router.pathname, 'redirigiendo') router.replace('/login') } } } //comprobamos que haya un token y redirigimos al usuario en base a el checkToken(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [isVender]) return ( <div> {children} </div> ) }

así es como lo importo dentro del componente _app.js

 return ( <AuthProvider> <Layout> <Component {...pageProps} /> </Layout> </AuthProvider> ) }

Espero que me puedan ayudar, gracias de antemano!

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

0

Si desea que useEffect se active en los cambios del enrutador, debe agregarlo como una dependencia de su enlace useEffect:

 useEffect(() => { ... }, [isVender, router.pathname])
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!