lumrop/src/hooks/useWindowSize.js

54 lines
1.2 KiB
JavaScript

import { useState, useEffect } from "react";
const screenSizeLimit = {
mobile: 768,
tablet: 992
};
const useWindowSize = () => {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined
});
useEffect(() => {
// Handler to call on window resize
function handleResize() {
// Set window width/height to state
setWindowSize({
width: window.innerWidth,
height: window.innerHeight
});
}
// Add event listener
window.addEventListener("resize", handleResize);
// Call handler right away so state gets updated with initial window size
handleResize();
// Remove event listener on cleanup
return () => window.removeEventListener("resize", handleResize);
}, []); // Empty array ensures that effect is only run on mount
const isMobile = windowSize.width < screenSizeLimit.mobile;
const isTablet =
windowSize.width >= screenSizeLimit.mobile &&
windowSize.width < screenSizeLimit.tablet;
const isDesktop = windowSize.width >= screenSizeLimit.tablet;
return {
windowSize,
isMobile,
isTablet,
isDesktop
};
};
export default useWindowSize;
/* Test it:
<div>
{windowSize.width}px / {windowSize.height}px
</div>
*/