Rev 3095 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useLayoutEffect, useState } from 'react'
const IS_SERVER = typeof window === 'undefined'
export function useMediaQuery(
query,
{ defaultValue = false, initializeWithValue = true }
) {
const getMatches = (query) => {
if (IS_SERVER) {
return defaultValue
}
return window.matchMedia(query).matches
}
const [matches, setMatches] = useState(() => {
if (initializeWithValue) {
return getMatches(query)
}
return defaultValue
})
// Handles the change event of the media query.
function handleChange() {
setMatches(getMatches(query))
}
useLayoutEffect(() => {
const matchMedia = window.matchMedia(query)
handleChange()
matchMedia.addEventListener('change', handleChange)
return () => {
matchMedia.removeEventListener('change', handleChange)
}
}, [query])
return matches
}