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

323
Vistas
Vuelva a renderizar un componente después de usar navegar('/ruta')

En este caso, cuando el usuario inicie sesión, será redirigido a la página de mensajes. Quiero que el componente de encabezado se represente después de esto, pero no sucede. Si se muestra el encabezado, el enlace cambiará, pero si no se muestra, el enlace permanecerá sin cambios hasta que se actualice la página... ¿qué puedo hacer?

iniciar sesión.js:

 const login = async (e) => { e.preventDefault(); const result = await ( await fetch("/portfolio/login", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data), }) ).json(); if (result.accessToken) { navigate("/message"); //imported from @reach/router } else console.log(result.error); if (result.message) setRes(result.message); };

encabezado.js:

 const Header = () => { const [tokenObj, setToken] = useState(''); useEffect(() => { fetch('/portfolio/verify', {method : "GET"}) .then((res)=>{ if(res.ok) return res.json(res); }) .then((jsonRes)=> { if(jsonRes.token) setToken(jsonRes.token) }); }, [tokenObj]); let lastNavLink; let lastNavHref; if(tokenObj){ lastNavLink = 'Messages'; lastNavHref = '/message' } else { lastNavLink = 'Login'; lastNavHref = '/login'; } return <a href={lastNavHref}> {lastNavLink} </a> //dynamic link };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Hay dos cosas que debe tener en cuenta antes de lanzarse a la solución:

  1. Los componentes se vuelven a renderizar en función del cambio de Estado o Prop, eso es todo.
  2. Debe guardar su información de inicio de sesión en el navegador con algo como localStorage para saber si el usuario ha iniciado sesión o no, independientemente de volver a cargar su página.

Por lo tanto, al regresar, debe representar el enlace de forma condicional en función de la información de inicio de sesión (puede ser cualquier cosa, pero lo más probable es que sea información de usuario y/o token de acceso/autenticación) que guardará en el almacenamiento del navegador localmente después de iniciar sesión. Pero hay un problema, guardar y recuperar los datos de inicio de sesión de localStorage no sería suficiente porque necesitamos esos datos en forma de estado o accesorio, ya que solo entonces el componente reaccionará al cambio. Entonces, para contrarrestar eso, tendrá que sincronizar de alguna manera los datos en localStorage con state/prop.

Para lograr esto, se podría usar una combinación de redux , react-redux y redux-persist para contrarrestar este problema. Entonces, básicamente, funcionaría de la misma manera que funciona un flujo de redux normal, pero el cambio principal se realizará conservando su información de inicio de sesión a través redux-persist . Una vez que envuelva su reductor de inicio de sesión con redux-persist , persistirá/sincronizará automáticamente su reductor de inicio de sesión con localStorge . Puede encontrar muchos ejemplos para esto. Por lo tanto, enviaría su acción de inicio de sesión después de recibir la respuesta con datos relevantes como argumento (que se guardará en la tienda) y el resto será manejado por redux . Después de eso, solo tendría que obtener su estado de inicio de sesión de redux en su encabezado y, en función de eso, renderizar condicionalmente su enlace.

Esta es una solución posible, pero de todos modos te haces una idea de cómo funcionará. Podrías usar Context en lugar de Redux si quieres, pero de todos modos entiendes la idea.

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