Last active
January 14, 2022 11:11
-
-
Save kaspar-naaber/0397764079b733094bbb83a86113e014 to your computer and use it in GitHub Desktop.
use-breakpoints custom hook
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { useEffect, useState } from 'react'; | |
import { useMediaQuery } from 'react-responsive'; | |
const gridBreakpoints = { | |
xs: 0, | |
sm: 576, | |
md: 768, | |
lg: 992, | |
xl: 1200, | |
xxl: 1400, | |
}; | |
const { xs, sm, md, lg, xl, xxl } = gridBreakpoints; | |
const getMaxWidthQuery = (breakpoint: number) => ({ | |
query: `(max-width: ${breakpoint - 0.02}px)`, | |
}); | |
const getMinWidthQuery = (breakpoint: number) => ({ | |
query: `(min-width: ${breakpoint}px)`, | |
}); | |
const initialState = { | |
mediaBreakPointDownXs: false, | |
mediaBreakPointUpXs: false, | |
mediaBreakPointDownSm: false, | |
mediaBreakPointUpSm: false, | |
mediaBreakPointDownMd: false, | |
mediaBreakPointUpMd: false, | |
mediaBreakPointDownLg: false, | |
mediaBreakPointUpLg: false, | |
mediaBreakPointDownXl: false, | |
mediaBreakPointUpXl: false, | |
mediaBreakPointDownXxl: false, | |
mediaBreakPointUpXxl: false, | |
}; | |
const useBreakpoints = () => { | |
const [breakpoints, setBreakpoints] = useState(initialState); | |
const mediaBreakPointDownXs = useMediaQuery(getMaxWidthQuery(xs)); | |
const mediaBreakPointUpXs = useMediaQuery(getMinWidthQuery(xs)); | |
const mediaBreakPointDownSm = useMediaQuery(getMaxWidthQuery(sm)); | |
const mediaBreakPointUpSm = useMediaQuery(getMinWidthQuery(sm)); | |
const mediaBreakPointDownMd = useMediaQuery(getMaxWidthQuery(md)); | |
const mediaBreakPointUpMd = useMediaQuery(getMinWidthQuery(md)); | |
const mediaBreakPointDownLg = useMediaQuery(getMaxWidthQuery(lg)); | |
const mediaBreakPointUpLg = useMediaQuery(getMinWidthQuery(lg)); | |
const mediaBreakPointDownXl = useMediaQuery(getMaxWidthQuery(xl)); | |
const mediaBreakPointUpXl = useMediaQuery(getMinWidthQuery(xl)); | |
const mediaBreakPointDownXxl = useMediaQuery(getMaxWidthQuery(xxl)); | |
const mediaBreakPointUpXxl = useMediaQuery(getMinWidthQuery(xxl)); | |
useEffect(() => { | |
setBreakpoints({ | |
mediaBreakPointDownXs, | |
mediaBreakPointUpXs, | |
mediaBreakPointDownSm, | |
mediaBreakPointUpSm, | |
mediaBreakPointDownMd, | |
mediaBreakPointUpMd, | |
mediaBreakPointDownLg, | |
mediaBreakPointUpLg, | |
mediaBreakPointDownXl, | |
mediaBreakPointUpXl, | |
mediaBreakPointDownXxl, | |
mediaBreakPointUpXxl, | |
}); | |
}, [ | |
mediaBreakPointDownXs, | |
mediaBreakPointUpXs, | |
mediaBreakPointDownSm, | |
mediaBreakPointUpSm, | |
mediaBreakPointDownMd, | |
mediaBreakPointUpMd, | |
mediaBreakPointDownLg, | |
mediaBreakPointUpLg, | |
mediaBreakPointDownXl, | |
mediaBreakPointUpXl, | |
mediaBreakPointDownXxl, | |
mediaBreakPointUpXxl, | |
]); | |
return breakpoints; | |
}; | |
export default useBreakpoints; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
use-breakpoints
useMediaQuery based custom hook for spefic breakpoints
Usage
Modify the breakpoint values:
Use in a component