
📦 쉽게 말하면, “상태 로직을 재사용 가능한 함수로 빼낸 것“이 Custom Hook
➡️ 예를 들어, “윈도우 사이즈 추적”하는 Custom Hook을 만들어보자
// useWindowSize.js
import { useState, useEffect } from "react";
function useWindowSize() {
const [size, setSize] = useState({
width: window.innerWidth,
height: window.innerHeight,
});
useEffect(() => {
const handleResize = () => {
setSize({
width: window.innerWidth,
height: window.innerHeight,
});
};
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
return size;
}
export default useWindowSize;
➡️ 사용하는 쪽에서는 이렇게 간단하게!
import useWindowSize from "./useWindowSize";
function App() {
const { width, height } = useWindowSize();
return (
<div>
<h1>Window size: {width} x {height}</h1>
</div>
);
}
설명
Custom Hook: useWindowSize()
└─ useState (상태 저장)
└─ useEffect (윈도우 리사이즈 이벤트 등록)
└─ 데이터 반환 (width, height)
컴포넌트: App
└─ useWindowSize() 호출
└─ width, height로 화면 렌더링
| 항목 | 컴포넌트 | Custom Hook |
|---|---|---|
| 반환 값 | JSX(화면) | 데이터, 함수 등 로직 |
| 목적 | 화면 그리기 | 상태 로직 재사용, 분리 |