| 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 | |
| } | |