use-mobile.ts 579 B

1234567891011121314151617181920212223
  1. import * as React from "react";
  2. const MOBILE_BREAKPOINT = 768;
  3. const MOBILE_MEDIA_QUERY = `(max-width: ${MOBILE_BREAKPOINT - 1}px)`;
  4. function subscribe(callback: () => void) {
  5. const mql = window.matchMedia(MOBILE_MEDIA_QUERY);
  6. mql.addEventListener("change", callback);
  7. return () => mql.removeEventListener("change", callback);
  8. }
  9. function getSnapshot() {
  10. return window.innerWidth < MOBILE_BREAKPOINT;
  11. }
  12. function getServerSnapshot() {
  13. return false;
  14. }
  15. export function useIsMobile() {
  16. return React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
  17. }