Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
¿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
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda