IT/React
[React] React-responsive- 반응형 실습
HJ::
2023. 9. 25. 18:20
미리보기
사용법
- 라이브러리 설치
npm install react-responsive
# or
yarn add react-responsive
export default function Component() {
const matches = useMediaQuery('(min-width: 768px)')
return (
<div>
{`The view port is ${matches ? 'at least' : 'less than'} 768 pixels wide`}
</div>
)
}
- 밑에 보이는거와 같이 interface에 여러 매개변수를 사용하지만 주로 쓰이는건 'min-width', 'max-width' 입니다.
- useMediaQuery에 값을 지정해주면 창 크기에 따라 true/false를 반환해준다.
- 그 값에 따라 조건부 랜더링(&&)을 시켜준다.
Home.tsx
const Home = () => {
const [windowSize, setWindowSize] = useState({
width: window.innerWidth,
height: window.innerHeight,
});
useEffect(() => {
// 창 크기 변경 이벤트 핸들러
const handleResize = () => {
setWindowSize({ width: window.innerWidth, height: window.innerHeight });
};
// 컴포넌트가 마운트될 때와 언마운트될 때 이벤트 리스너 추가 및 제거
window.addEventListener("resize", handleResize);
return () => {
window.removeEventListener("resize", handleResize);
};
}, []);
return (
<>
<p>Window Width: {windowSize.width}px</p>
<Header />
<Body/>
</>
);
};
- 정확한 수치를 확인할 수 있게 창 사이즈 크기를 띄어주었습니다.
Header.tsx
const Header = () => {
const isDesktop = useMediaQuery({ minWidth: 1024 });
return (
<>
<Desktop>
<div>this is Desktop</div>
</Desktop>
<Tablet>
<div>this is Tablet</div>
</Tablet>
<Mobile>
<div>This is Mobile</div>
</Mobile>
<HeaderWrapper>
<div>
{/* 목록 버튼 */}
<button>List Button</button>
</div>
{isDesktop && <Logo>로고</Logo>}
<Nav>
<ul>
{/* 메뉴 버튼들 */}
<li>
<a href="#">메뉴 1</a>
</li>
{isDesktop && (
<>
<li>
<a href="#">메뉴 2</a>
</li>
<li>
<a href="#">메뉴 3</a>
</li>
</>
)}
</ul>
</Nav>
</HeaderWrapper>
</>
);
};
- desktop사이즈일 때만, 로고 이미지가 보이도록하고,
메뉴 nav바도 모두 보이도록 하였습니다.
Body
const Body = () => {
const isDesktop = useMediaQuery({ minWidth: 1024 });
return (
<Container>
<Content>
{/* 내용을 이곳에 추가 */}
<h1>내용을 가운데 정렬합니다.</h1>
<p>기타 내용이 들어갑니다.</p>
</Content>
{isDesktop && (
<Content>
{/* 내용을 이곳에 추가 */}
<h1>내용을 가운데 정렬합니다.</h1>
<p>기타 내용이 들어갑니다.</p>
</Content>
)}
</Container>
);
};
- 마찬가지로 desktop이면 본론의 모든 내용이 보이도록 하였습니다.
참고
https://usehooks-ts.com/react-hook/use-media-query
useMediaQuery
Discover how to use useMediaQuery from usehooks-ts
usehooks-ts.com