DEMO
Try resizing the window to observe change
Size greater than "md" -false
Size greater than "md" (non reactive) -false
Size between "md" and "lg"-false
BreakPointHooks
Reactive hooks and utilities to be used with user provided breakpoints.
Functions
Reactive hooks
useGreater
useSmaller
useBetween
Non reactive utility function
isGreater
isSmaller
isInBetween
Usage
import { BreakPointHooks, breakpointsTailwind } from '@react-hooks-library/core'
const { useGreater, useBetween, isSmaller } =
BreakPointHooks(breakpointsTailwind)
// Non reactive check, can be used outside react components
const smaller = isSmaller('xl')
function Demo() {
// Greater than md
const greater = useGreater('md')
// Betweeb md and lg
const between = useBetween('md', 'lg')
// smaller than 2xl
const smaller = useSmaller('2xl')
}
return (
<div>
{greater && 'Greater than md'}
{between && 'Between md & lg'}
{smaller && 'Smaller than 2xl'}
</div>
)
import { BreakPointHooks } from '@react-hooks-library/core'
const breakpoints = {
mobile: 425,
tablet: 768,
laptop: 1024,
desktop: 1560
}
const { useGreater, useBetween } = BreakPointHooks(breakpoints)
function Demo() {
// Greater than mobile
const greater = useGreater('mobile')
// Betweeb laptop and desktop
const between = useBetween('laptop', 'desktop')
// smaller than tablet
const smaller = useSmaller('tablet')
}
Performance Optimization
If you use the these BreakPointHooks
a lot in your application, you run the risk of unnecessary performance loss by adding too many event listeners.
A way to optimise is to setup all of these hooks in a context provider
and consume them with React.useContext()
, thus you only setup media query event listeners only once.
React.useContext
causes re-renders in all components that consume that context, whether the consumed value is used or not,
So you can further further optimise these contexts by using either use-context-selector or react-tracked.
Available Breakpoints
/**
* Breakpoints from Tailwind V2
*
* @see https://tailwindcss.com/docs/breakpoints
*/
export const breakpointsTailwind = {
sm: 640,
md: 768,
lg: 1024,
xl: 1280,
'2xl': 1536
}
/**
* Breakpoints from Bootstrap V5
*
* @see https://getbootstrap.com/docs/5.0/layout/breakpoints
*/
export const breakpointsBootstrapV5 = {
sm: 576,
md: 768,
lg: 992,
xl: 1200,
xxl: 1400
}
/**
* Breakpoints from Vuetify V2
*
* @see https://vuetifyjs.com/en/features/breakpoints
*/
export const breakpointsVuetify = {
xs: 600,
sm: 960,
md: 1264,
lg: 1904
}
/**
* Breakpoints from Ant Design
*
* @see https://ant.design/components/layout/#breakpoint-width
*/
export const breakpointsAntDesign = {
xs: 480,
sm: 576,
md: 768,
lg: 992,
xl: 1200,
xxl: 1600
}
/**
* Sematic Breakpoints
*/
export const breakpointsSematic = {
mobileS: 320,
mobileM: 375,
mobileL: 425,
tablet: 768,
laptop: 1024,
laptopL: 1440,
desktop4K: 2560
}
Type Declarations
/**
* Reactive hooks and utilities to be used with user provided breakpoints.
*
* @param {string} breakpoints
* @returns functions to be used as hooks
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
*/
declare function BreakPointHooks<BreakPoints extends Record<string, number>>(
breakpoints: BreakPoints
): {
/**
* Hook that returns a boolean if screen width is greater than given breakpoint.
*
* @param k {string} breakpoint
* @returns boolean
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
**/
useGreater: (k: keyof BreakPoints) => boolean
/**
* Hook that returns a boolean if screen width is smaller than given breakpoint.
*
* @param k {string} breakpoint
* @param k {string} breakpoint
*
* @returns boolean
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
**/
useSmaller: (k: keyof BreakPoints) => boolean
/**
* Hook that returns a boolean if screen width is between two given breakpoint.
*
* @param a {string} breakpoint
* @param b {string} breakpoint
*
* @returns boolean
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
**/
useBetween: (a: keyof BreakPoints, b: keyof BreakPoints) => boolean
/**
* Utility function that returns a boolean if screen width is greater than given breakpoint.
*
* @param k {string} breakpoint
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
**/
isGreater(k: keyof BreakPoints): boolean
/**
* Utility function that returns a boolean if screen width is smaller than given breakpoint.
*
* @param k {string} breakpoint
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
**/
isSmaller(k: keyof BreakPoints): boolean
/**
* Utility function that returns a boolean if screen width is between two given breakpoint.
*
* @param k {string} breakpoint
*
* @see https://react-hooks-library.vercel.app/core/BreakPointHooks
**/
isInBetween(a: keyof BreakPoints, b: keyof BreakPoints): boolean
}
declare type BreakPointHooksReturn = ReturnType<typeof BreakPointHooks>