nextui/apps/docs/hooks/use-media-query.ts
2023-05-01 00:20:48 -03:00

33 lines
768 B
TypeScript

import {useState, useCallback, useEffect} from "react";
export const useMediaQuery = (width: number): boolean => {
const [targetReached, setTargetReached] = useState(false);
const updateTarget = useCallback((e: MediaQueryListEvent) => {
if (e.matches) {
setTargetReached(true);
} else {
setTargetReached(false);
}
}, []);
useEffect(() => {
const media = window.matchMedia(`(max-width: ${width}px)`);
media.addListener(updateTarget);
// Check on mount (callback is not called until a change occurs)
if (media.matches) {
setTargetReached(true);
}
return () => media.removeListener(updateTarget);
}, []);
return targetReached;
};
export const useIsMobile = () => {
return useMediaQuery(650);
};