• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

390
Vistas
Si actualizo la página matchMedia no funciona

Estoy usando matchMedia en React para colapsar mi barra lateral cuando la página cambia de tamaño. Pero el problema es que si actualizo la página, mi barra lateral está abierta, no cerrada. Entonces, si quiero colapsar mi barra lateral, necesito cambiar el tamaño de la página nuevamente o usar el botón de cerrar.

 const layout = document.getElementById('home-layout'); const query = window.matchMedia('(max-width: 765px)'); query.onchange = (evt) => { if( query.matches ) { changeMenuMinified(true); layout.classList.add('extended-layout'); } else { changeMenuMinified(false); layout.classList.remove('extended-layout'); } }; query.onchange(); }; useEffect(() => { window.addEventListener('resize', handleResize); });

Si elimino addEventListener, funciona, puedo volver a cargar la página y mi barra lateral permanece cerrada, pero si trato de abrir la barra lateral con un botón, la barra lateral se cierra rápidamente.

 const handleResize = () => { const layout = document.getElementById('home-layout'); const query = window.matchMedia('(max-width: 765px)'); query.onchange = (evt) => { if( query.matches ) { changeMenuMinified(true); layout.classList.add('extended-layout'); } else { changeMenuMinified(false); layout.classList.remove('extended-layout'); } }; query.onchange(); }; useEffect(() => { handleResize() });

barra lateral

about 3 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Algunas cosas a considerar aquí:

  • Inicialice su estado con el valor coincidente actual
  • Eliminar el oyente en la función de limpieza de efectos
  • No olvide la matriz de dependencia useEffect para evitar que su código se ejecute en cada renderizado.

Puede encontrar un ejemplo de trabajo aquí -> https://codesandbox.io/s/stack-72619755-lpwh6m?file=/src/index.js:0-613

 const query = window.matchMedia('(max-width: 765px)') const App = () => { const [minified, changeMenuMinified] = useState(query.matches) useEffect(() => { const resizeHandler = () => { if (query.matches) { changeMenuMinified(true) } else { changeMenuMinified(false) } } query.addEventListener("change", resizeHandler); return () => query.removeEventListener("change", resizeHandler); }) return <p>{minified ? 'minified' : 'expanded'}</p> }

about 3 years ago · Santiago Gelvez 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda