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

119
Visualizações
Reaccionar forma de seleccionar elementos y agregar detectores de eventos.

Estoy creando un sitio de cartera con gatsby donde tengo una barra lateral a la izquierda con algunos enlaces (Inicio, acerca de, trabajo, etc.) y a la derecha está el contenido principal, que es una tira larga de secciones. Al hacer clic en un enlace, simplemente se desplaza a esa sección. Me gustaría que un enlace tuviera un estilo diferente cuando el usuario llega a esa sección. Encontré una solución en javascript de vainilla para aplicar el estado activo que funciona, pero no sé cómo hacerlo de la manera de reacción.

 useEffect(() => { const navbarlinks = document.querySelectorAll("nav a"); const navbarlinksActive = () => { let position = window.scrollY + 200; navbarlinks.forEach((navbarlink) => { let section = document.querySelector(navbarlink.hash); if (position >= section.offsetTop && position <= section.offsetTop + section.offsetHeight) { navbarlink.classList.add("active"); } else { navbarlink.classList.remove("active"); } }); }; window.addEventListener("load", navbarlinksActive); document.addEventListener("scroll", navbarlinksActive); return () => { window.removeEventListener("load", navbarlinksActive); document.removeEventListener("scroll", navbarlinksActive); }; }, []);

Estoy seleccionando todos los enlaces de navegación, luego recorriéndolos, obteniendo la propiedad hash, que coincidirá con la identificación de la sección correspondiente que luego se selecciona. Luego, la clase se agrega o elimina según su posición. Este código está en el componente de la barra lateral donde también están mis enlaces, que son elementos Gatsby Link.

 return ( <nav> <Link className="hover:text-clr-accent flex items-center py-2 px-4 transition" to="#home" > <i className="fa-solid fa-house w-6 text-center text-lg"></i> <span className="pl-2 text-lg">Home</span> </Link> <Link className="hover:text-clr-accent flex items-center py-2 px-4 transition" to="#resume" > <i className="fa-solid fa-file w-6 text-center text-lg"></i> <span className="pl-2 text-lg">Resume</span> </Link> <Link className="hover:text-clr-accent flex items-center py-2 px-4 transition" to="#about" > <i className="fa-solid fa-address-card w-6 text-center text-lg"></i> <span className="pl-2 text-lg">About me</span> </Link> <Link className="hover:text-clr-accent flex items-center py-2 px-4 transition" to="#work" > <i className="fa-solid fa-briefcase w-6 text-center text-lg"></i> <span className="pl-2 text-lg">My work</span> </Link> </nav> );
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

  1. En lugar de agregar/eliminar directamente la clase activa, configure el Id. del enlace activo para indicar y renderizar en función de eso. De lo contrario, reaccionar puede sobrescribir sus clases al renderizar

  2. No use el detector de eventos de carga en su lugar, simplemente llame a navbarlinksActive (), la ventana ya está cargada cuando se llama a su efecto.

about 4 years ago · Juan Pablo Isaza Relatório
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