Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

107
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!