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

205
Visualizações
Haga clic en OutSide co close sidebar reactjs

Creo una función cuando hago clic fuera de la barra lateral, la ocultará y también tengo un botón que alterna entre mostrar y ocultar la barra lateral. Pero cuando combiné ambos, el botón no funcionó correctamente, solo muestra la barra lateral pero no puede cerrarla, solo cuando hago clic afuera cerrará la barra lateral

ingrese la descripción de la imagen aquí

Haga clic en OutSide para cerrar la función:

 const ref = useRef(null); useEffect(() => { document.addEventListener("mousedown", Clickout); return () => { document.removeEventListener("mousedown", Clickout); }; }, []); const Clickout = (eve) => { if (ref.current && !ref.current.contains(eve.target)) { setShow(false); } };

Mi regreso:

 return ( <header> <div className="head"> <div className="logo"> <img src={logo} alt="logo" /> </div> <button className="burger" onClick={() => { setShow(!showMenu); console.log("here"); }} > <div className={`${showMenu ? "change" : ""} bur1 `}></div> <div className={`${showMenu ? "change" : ""} bur2 `}></div> <div className={`${showMenu ? "change" : ""} bur3 `}></div> </button> </div> <nav className={showMenu ? "active" : ""} ref={ref}> <ul> {navItem.map((item) => { const { id, url, text } = item; return ( <li key={id}> <a href={url}>{text}</a> </li> ); })} </ul> </nav> </header> ); };

CSS de la barra de navegación:

 nav { position: fixed; right: -100%; top: 0; width: 60%; height: 100vh; text-align: center; padding-top: 15vh; transition: 0.8s ease; background-color: blue; } nav.active { right: 0; transition: 0.5s; }

Gracias.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

puede usar otro estado para administrar el botón al hacer clic cuando el menú está abierto:

 const [disableBtn, setDisableBtn] = useState(false);

y en la función Clickout administrarlo:

 const Clickout = (eve) => { if (showMenu && ref.current && !ref.current.contains(eve.target)) { setShow(false); setDisableBtn(true) } else { setDisableBtn(false) } };

y en el botón para la condición de uso onclick:

 if (!disableBtn) setShow(true);
about 4 years ago · Juan Pablo Isaza Relatório

0

Actualizar el estado de esta manera setShow(!showMenu) no actualiza inmediatamente el estado. Más bien, programa la actualización (puede leer los documentos). Cuando su setState dependa de su estado anterior (en este caso, showMenu depende del estado anterior), use esta técnica: (prev) => setState(!prev) en su lugar. Entonces, simplemente actualizar su onClick resolverá el problema.

 <button className="burger" onClick={() => { (prevShowMenu) => setShow(!prevShowMenu) }}>

(Déjame saber en los comentarios si esto fue útil)

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