import { useState, useEffect } from 'react' export function useMediaQuery(query: string) { const [state, setState] = useState( typeof window !== 'undefined' ? window.matchMedia(query).matches : false ) useEffect(() => { let mounted = true const mql = window.matchMedia(query) const onChange = () => { if (!mounted) { return } setState(!!mql.matches) } mql.addEventListener('change', onChange) setState(mql.matches) return () => { mounted = false mql.removeEventListener('change', onChange) } }, [query]) return state }