use-mobile.ts 656 B

12345678910111213141516171819202122232425
  1. "use client";
  2. import { useSyncExternalStore } from "react";
  3. const MOBILE_BREAKPOINT = 768;
  4. function getIsMobile() {
  5. return typeof window !== "undefined"
  6. ? window.innerWidth < MOBILE_BREAKPOINT
  7. : false;
  8. }
  9. function subscribe(callback: () => void) {
  10. const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
  11. mql.addEventListener("change", callback);
  12. window.addEventListener("resize", callback);
  13. return () => {
  14. mql.removeEventListener("change", callback);
  15. window.removeEventListener("resize", callback);
  16. };
  17. }
  18. export function useIsMobile() {
  19. return useSyncExternalStore(subscribe, getIsMobile, () => false);
  20. }