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

212
Vistas
¿Cómo desplazarse suavemente a una etiqueta de anclaje desde otra página en NextJS?

Tengo 2 páginas en mi NextJS (1 es Inicio y otra es la página de clasificación). Y tengo una navbar de navegación como tal:

 <div className={styles.navItem}> <Link href="/"> <a className={styles.navLinks} onClick={toggle}> Home </a> </Link> </div> <div className={styles.navItem} onClick={toggle}> <Link href="/"> <a className={styles.navLinks} onClick={setTimeout((e) => { document.getElementById("about") && document .getElementById("about") .scrollIntoView({ behavior: "smooth", block: "end" }); }, 2000)} > About Us </a> </Link> </div> <div className={styles.navItem} onClick={toggle}> <Link href="/"> <a className={styles.navLinks} onClick={setTimeout((e) => { document.getElementById("program") && document .getElementById("program") .scrollIntoView({ behavior: "smooth", block: "end" }); }, 2000)} > Program Overview </a> </Link> </div> <div className={styles.navItem}> <Link href="/leaderboard/"> <a className={styles.navLinks} onClick={toggle}> Leaderboard </a> </Link> </div>

Pensé que tal vez al usar un retraso setTimeout me redirigiría primero a la página de inicio (cuando hago clic en la etiqueta Link ) y luego, después de 2 segundos, me desplazaría suavemente a la sección a la que quería ir. Pero esto produce un document is not defined y cuando vuelvo a cargar la página, la página se desplazaría suavemente a #program después de 2 segundos, incluso sin hacer clic en la etiqueta. ¿Qué estoy haciendo mal?

ERROR (EN TERMINAL)

 error - components/main/Nav/MenuRight.js (18:23) @ Timeout.eval [as _onTimeout] ReferenceError: document is not defined 16 | <Link href="/"> 17 | <a > 18 | className={styles.navLinks} | ^ 19 | onClick={() => 20 | setTimeout((e) => { 21 | document.getElementById("about") &&
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su problema es que llama directamente a setTimeout , que se ejecuta de inmediato en el servidor (más específicamente, NextJS no tiene objetos de window y document en el lado del servidor), por eso el document no está disponible.

Debe envolverlo en una función como la siguiente y onClick solo se activará una vez que haga clic en ese elemento

 <div className={styles.navItem}> <Link href="/"> <a className={styles.navLinks} onClick={toggle}> Home </a> </Link> </div> <div className={styles.navItem} onClick={toggle}> <Link href="/"> <a className={styles.navLinks} onClick={(e) => { setTimeout(() => { document.getElementById("about") && document .getElementById("about") .scrollIntoView({ behavior: "smooth", block: "end" }); }, 2000) }} > About Us </a> </Link> </div> <div className={styles.navItem} onClick={toggle}> <Link href="/"> <a className={styles.navLinks} onClick={(e) => { setTimeout(() => { document.getElementById("program") && document .getElementById("program") .scrollIntoView({ behavior: "smooth", block: "end" }); }, 2000) }} > Program Overview </a> </Link> </div> <div className={styles.navItem}> <Link href="/leaderboard/"> <a className={styles.navLinks} onClick={toggle}> Leaderboard </a> </Link> </div>
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