useMediaQuery

Reagir a breakpoints e prefers-color-scheme

Da coleção Custom Hooks. Lê uma media query via matchMedia e re-renderiza quando ela muda — para decidir layout no JS ou reagir ao tema do sistema.

import { useEffect, useState } from "react";

const useMediaQuery = (query: string): boolean => {
  // Guarda contra SSR: window não existe no servidor.
  const [matches, setMatches] = useState(
    () => typeof window !== "undefined" && window.matchMedia(query).matches,
  );

  useEffect(() => {
    const mql = window.matchMedia(query);
    const onChange = () => setMatches(mql.matches);
    onChange(); // sincroniza no mount (query pode ter mudado).
    mql.addEventListener("change", onChange);
    return () => mql.removeEventListener("change", onChange);
  }, [query]);

  return matches;
};

export default useMediaQuery;

⚠️ Prefira media queries em CSS para estilo puro; use este hook quando a decisão muda a lógica/JSX (renderizar componentes diferentes, por exemplo).

Exemplo — combina com o tema dark/light do template HTML:

const isDark = useMediaQuery("(prefers-color-scheme: dark)");
const isWide = useMediaQuery("(min-width: 768px)");

return isWide ? <Sidebar /> : <Drawer />;

Relacionadas: Custom Hooks · use-local-storage · template HTML.

Construído com Eleventy · busca por Lunr.js