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

234
Vistas
useState en next.js al navegar usando Link (siguiente/enlace)

Tengo una página next.js para mostrar una publicación, como un blog, y uso Link para pasar de una publicación a otra. Para mostrar la publicación adecuada, uso otro componente, algo como esto (tenga en cuenta que corté una gran cantidad de código por simplicidad)

 const Index: NextPage<PageProps> = (props) => { const router = useRouter(); let post = props.post; return ( <> <Post post={post}/> <Link href={`/post/${encodeURIComponent(props.next.id)}`} passHref={true}> <a>next post</a> </Link> <Link href={`/post/${encodeURIComponent(props.previous.id)}`} passHref={true}> <a>previous post</a> </Link> </> ); }; export default Index; export const getServerSideProps = async (context) => { const session = await getSession(context); const pid = context.params.pid; let postManager = new PostManager(); let post = await postManager.getPost(pid); let siblings = null; if (post) { siblings = await postManager.getSiblings(post); } return { props: { post: JSON.parse(JSON.stringify(post)), next: (siblings && siblings.next) ? JSON.parse(JSON.stringify(siblings.next)) : null, previous: (siblings && siblings.previous) ? JSON.parse(JSON.stringify(siblings.previous)) : null, session: session, } }; };

lo extraño es que en el componente Post parece que useState no se ejecuta después de la primera vez que cargo la página:

 const Post = props => { const [title, setTitle] = useState(props.post.title); console.log(props.post.title); console.log(title);

aquí cuando cargo la página "directamente" los dos valores son iguales (lo cual está bien). Luego, cuando hago clic en Enlace (en el componente de la página), el segundo archivo console.log muestra el valor del contenido que cargué directamente.

Esto no sucede si elimino Link y dejo <a> , pero, por supuesto, usar Link es más rápido, así que prefiero usarlo.

¿Cómo puedo "forzar" a useState a establecer el valor correcto cada vez que los accesorios han cambiado?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debido a que permanece en la misma página con un enrutamiento poco profundo, el componente no se vuelve a renderizar nuevamente, pero los accesorios se actualizan. Este es el comportamiento previsto de reaccionar/siguiente.

Agregue a su componente Publicar lo siguiente:

 useEffect(() => { setTitle(props.post.title); }, [props]);

Esto actualizará el estado cuando se actualicen los accesorios. Hazme saber si tienes alguna pregunta.

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