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

125
Views
¿Cómo evitar el bucle infinito en useEffect usando Object from Redux store como dependencia?

Soy relativamente nuevo en React, por lo que probablemente sea una respuesta fácil para algunos de ustedes.

Me encontré con un pequeño problema, lo resolví, pero no parece ser perfecto ya que React Eslint no está feliz.

Mi aplicación web usa React-Redux en la parte delantera y Node-Express-Mongo en la parte posterior. Entonces, tengo un componente funcional (pantalla/página), y cada vez que un usuario lo visita, necesita actualizar el estado de los datos del usuario en la tienda Redux para asegurarse de que coincida con los datos actuales en la base de datos.

Sin embargo, los usuarios que no están registrados y que no han iniciado sesión también pueden visitar esa página, entonces, obviamente, no se necesita verificar la base de datos.

Obtengo datos de usuario como objeto userInfo de Redux:

 const userLogin = useSelector((state) => state.userLogin); const { loading: loadingUser, error: errorUser, userInfo } = userLogin;

Luego, cuando el componente procesa useEffect() , envío una acción para obtener los datos del usuario del backend (DB) usando el token JWT.

 useEffect(() => { //update user details in case if access to restricted services changes if (userInfo && userInfo.token) { dispatch(refreshUser(userInfo.token)); } // eslint-disable-next-line }, []);

Como puede ver, mantuve la matriz de dependencia vacía y la deshabilité para eslint para mantener contento al Sr. Eslint.

Hasta ahora, esta es la única forma en que puedo hacer que funcione. Si pongo userInfo en la matriz de dependencias, crea un bucle infinito, porque como sabemos, {}==={} siempre devuelve false .

Si me deshago de userInfo de useEffect() y mantengo solo userInfo.token , pero luego crea un error userInfo is undefined siempre que el usuario no haya iniciado sesión

Por supuesto, puedo llenar la tienda Redux con algún estado inicial de userInfo userInfo.token , pero eso parece ser una molestia innecesaria. También traté de poner useEffect dentro de la instrucción if (userInfo){} , pero eso fue una tontería, ya que useEffect() debería permanecer en el nivel superior...

Tal como está ahora, hace lo que necesito que haga: se ejecuta solo una vez mientras se carga el componente (página).

Entonces mi pregunta es: ¿Está bien dejarlo así o debe haber alguna solución elegante?

about 4 years ago · Juan Pablo Isaza
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!