Skip to content

Instantly share code, notes, and snippets.

@jefflau
Created February 27, 2019 09:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jefflau/ae10c61495371aa3fe54cd97a3969209 to your computer and use it in GitHub Desktop.
Save jefflau/ae10c61495371aa3fe54cd97a3969209 to your computer and use it in GitHub Desktop.
useMedia hook
const useMedia = (query, defaultState) => {
const [state, setState] = useState(defaultState)
useEffect(
() => {
let mounted = true
const mql = window.matchMedia(query)
const onChange = () => {
if (!mounted) return
setState(!!mql.matches)
}
mql.addListener(onChange)
setState(mql.matches)
return () => {
mounted = false
mql.removeListener(onChange)
}
},
[query]
)
return state
}
export const useMediaMin = (bp, defaultState) =>
useMedia(`(min-width: ${breakpoints[bp]}px)`, defaultState)
export const useMediaMax = (bp, defaultState) =>
useMedia(`(max-width: ${breakpoints[bp] - 1}px)`, defaultState)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment