React Dojo

Search

Search concepts, exercises and quizzes

dom

useMediaQuery

Subscribes to a CSS media query and returns whether it currently matches. Updates reactively when the viewport changes.


useMediaQuery.ts
import { useState, useEffect } from "react"

export function useMediaQuery(query: string): boolean {
  const [matches, setMatches] = useState(false)

  useEffect(() => {
    const media = window.matchMedia(query)
    setMatches(media.matches)

    const listener = (e: MediaQueryListEvent) => setMatches(e.matches)
    media.addEventListener("change", listener)
    return () => media.removeEventListener("change", listener)
  }, [query])

  return matches
}
Was this helpful?
Sign in to give feedback