useIsMobile.ts 728 B

1234567891011121314151617181920212223242526
  1. import { useState, useEffect } from 'react';
  2. const MOBILE_BREAKPOINT = 768;
  3. export function useIsMobile(): boolean {
  4. const [isMobile, setIsMobile] = useState(() =>
  5. typeof window !== 'undefined' ? window.innerWidth < MOBILE_BREAKPOINT : false
  6. );
  7. useEffect(() => {
  8. const mediaQuery = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
  9. const handleChange = (e: MediaQueryListEvent) => {
  10. setIsMobile(e.matches);
  11. };
  12. // Set initial value
  13. setIsMobile(mediaQuery.matches);
  14. // Modern browsers support addEventListener
  15. mediaQuery.addEventListener('change', handleChange);
  16. return () => mediaQuery.removeEventListener('change', handleChange);
  17. }, []);
  18. return isMobile;
  19. }