728x90
window.matchMedia를 이용해서 리액트에서 화면 크기 변경 감지하는 방법
useCheckScreenSize.ts
// useCheckScreenSize.ts
import { useState, useEffect } from 'react';
export function useCheckScreenSize(query: string): boolean {
const [matches, setMatches] = useState(false);
useEffect(() => {
// SSR
if(typeof window === "undefined") return;
const mq = window.matchMedia(query);
setMatches(mq.matches);
const handler = () => setMatches(mq.matches);
mq.addEventListener("change", handler);
return () => mq.removeEventListener('change', handler);
}, [query])
return matches;
}
MyComponent.ts
// 1000px 미만 : false, 1000px 이상 : true
const isOver1000 = useCheckScreenSize("(min-width: 1000px)");
// 480px 이하 : true, 480px 초과 : false
const isMobile = useCheckScreenSize("(max-width: 480px)");
728x90
'프론트엔드' 카테고리의 다른 글
| [해결] videojs에서 HLS 스트리밍 시 CORS 오류 발생 (0) | 2023.10.09 |
|---|---|
| [Javascript] 스크롤바 위치 퍼센트 구하기 (0) | 2023.01.09 |
| [트러블 슈팅] base 64 image to Javascript File (Feat. Naver Smart Editor 2.0) (3) | 2022.01.19 |
| [트러블 슈팅] 페이지 길 때만 top 버튼 보이기(feat. window.onload, $(document).ready 차이) (0) | 2022.01.17 |
| [Javascript] onclick과 addEventListener의 차이 (1) | 2021.09.21 |
댓글