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

155
Views
¿Cómo volver a renderizar un componente ReactJs y recuperar una consulta con Apollo cuando se actualiza un estado pasado como accesorios de un padre?

Hay un estado userIsAuthenticated en mi componente principal de la App que es false de forma predeterminada pero se vuelve true con la función setUserIsAuthenticated() cuando el usuario inicia sesión.

Ahora, en otro componente, me gustaría mostrar algunos datos del usuario, como el nombre de usuario. Los datos del usuario se obtienen de la API de back-end con Apollo:

Aquí está el componente:

 import React from 'react'; import { useQuery } from "@apollo/client"; import { ME } from "../../api/authentication/me"; import LogoutButton from "../authentication/authentication-required/logout-button"; const Nav = ({ userIsAuthenticated }) => { const { data, loading, errors } = useQuery(ME); if (loading) return "User is loading..."; if (errors) console.log(errors); return ( <div className="Nav"> {/* internalState = { internalState } */} <br /> { JSON.stringify(data, null, 2) } <br /> <LogoutButton/> </div> ) }

Aquí está mi problema: cuando el usuario inicia sesión, la consulta se realiza nuevamente pero el componente no se actualiza. Esto solo funciona si voy a otra página (estoy usando react-router-dom ) o si actualizo la página.

Sé que en React, un estado debe cambiar en el componente o en sus elementos secundarios para volver a renderizarse, así que intenté usar estados de actualización que cambian cuando cambia el userIsAuthenticated los accesorios recibidos.

Aquí hay un ejemplo de lo que probé:

 const Nav = ({ userIsAuthenticated }) => { const { data, loading, errors, refetch } = useQuery(ME); const [internalState, setInternalState] = useState(userIsAuthenticated); const [perviousValue, setPerviousValue] = useState(); if (userIsAuthenticated !== perviousValue){ const refetchMe = async() => { await setTimeout(() => await refetch(); } refetchMe(); setInternalState(userIsAuthenticated); setPerviousValue(userIsAuthenticated); } console.log(internalState); // To check if the state is correctly updated if (loading) return "User is loading..."; if (errors) console.log(errors); return ( <div className="Nav"> {/* internalState = { internalState } */} <br /> { JSON.stringify(data, null, 2) } <br /> <LogoutButton/> </div> )

Pero esto no resuelve el problema. El componente aún no se vuelve a procesar mientras no actualice la página o si no voy a otra página.

También probé con el gancho useEffect , pero siempre termino en un bucle infinito a pesar de que solo pongo mis accesorios userIsAuthenticated en la matriz de dependencia.

¿Hay alguna forma de volver a representar el componente después de recuperar la consulta sin tener que actualizar la página o pasar a otra?

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!