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

110
Visualizações
¿Por qué no se devuelve el estado actualizado a mi componente?

Tengo un drawer para la navegación de mi móvil. Se abre bien y se cierra bien cuando toco el icono del cajón. Pero estoy tratando de implementar un toque/clic para cerrar la barra de navegación. Entonces, cuando el usuario hace clic o toca fuera de la barra de navegación, debería cerrarse. Pero estoy recibiendo errores para hacer tapping cuando el cajón está cerrado porque falta la ref en la página. Así que me gustaría usar una verificación para ver si el cajón está abierto ejecutando if (drawerIsOpen) { do...} else { dont...} Lo extraño es que no estoy recibiendo el estado actualizado de mis accesorios. El cajón se cierra y se abre como debería, pero cuando hago console.log(drawerIsOpen) nunca da el estado correcto. El siguiente código debería explicar algo de lo que quiero decir.

 const Drawer = ({ drawerIsOpen, handleDrawer, drawerButtonRef }) => { const drawerRef = useRef(null); function handleClickOutside(event) { if (!drawerIsOpen) { // always returns since state is always telling me the drawer is closed return; } if (drawerRef.current.contains(event.target)) { console.log('inside'); } else { console.log('outside'); console.log(handleDrawer); handleDrawer(); } } useEffect(() => { document.addEventListener('mousedown', handleClickOutside); document.addEventListener('touchstart', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); document.removeEventListener('touchstart', handleClickOutside); }; }, []);

Mi estado está siendo enviado a través de props. Mi estado comienza en este componente:

 const drawerButtonRef = useRef(null); const [drawerIsOpen, setDrawerIsOpen] = useState(false); const handleDrawer = () => { setDrawerIsOpen((prevState) => !prevState); }; return ( <> <Drawer drawerIsOpen={drawerIsOpen} handleDrawer={handleDrawer} drawerButtonRef={drawerButtonRef} /> </> )
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Intente pasar el drawerIsOpen como una dependencia. Su lógica useEffect fue llamada solo una vez.

Prueba lo siguiente:

 useEffect(() => { document.addEventListener('mousedown', handleClickOutside); document.addEventListener('touchstart', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); document.removeEventListener('touchstart', handleClickOutside); }; }, [drawerIsOpen]);

drawerRef también debería agregarse al elemento en el que desea este comportamiento; de lo contrario, no tiene sentido tenerlo en su lógica.

Además, Drawer no tiene ningún elemento JSX... ¿quizás olvidaste compartirlo en la publicación?

También puedes simplificar esto

 const handleDrawer = () => { setDrawerIsOpen((prevState) => !prevState); };

A esto

 const handleDrawer = () => { setDrawerIsOpen(!drawerIsOpen); };
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