Rev 3094 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useLayoutEffect, useState } from 'react'
export function useMediaQuery(
query,
options = { defaultValue: false, initializeWithValue: true }
) {
const getMatches = (query) => {
return window.matchMedia(query).matches
}
const [matches, setMatches] = useState(() => {
if (options.initializeWithValue) {
return getMatches(query)
}
return options.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
}