Next.js는 SSR을 기본으로 하기 때문에
서버에서 렌더링하는 시점에 window를 가져다 쓸 수 없다
따라서 window.innerWidth도 바로 쓸 수 없게 되는데
커스텀 훅을 통해서 window에 접근할 수 있는 방법이 있다
import { useState, useEffect } from 'react'
const useInnerWidth = () => {
const [innerWidthVal, setInnerWidthVal] = useState<number>(0)
useEffect(() => {
setInnerWidthVal(window.innerWidth)
const handleResize = () => {
setInnerWidthVal(window.innerWidth)
}
window.addEventListener('resize', handleResize)
return () => window.removeEventListener('resize', handleResize)
}, [])
return innerWidthVal
}
export default useInnerWidth
- useEffect() 를 통해서 window.innerWidth에 접근하고
- 컴포넌트가 mount 됐을 때, 이벤트 핸들러를 통해서 적용하고
- 컴포넌트가 unmount 됐을 때, 이벤트를 제거하는 식으로 동작시키면 에러 없이 window 객체에 접근할 수 있다.
728x90
'간단 기록' 카테고리의 다른 글
[Next.js] 확장성 높은 Layout 컴포넌트 구축하기 (0) | 2024.07.21 |
---|---|
[React] 새 창에서 동일한 세팅 값 유지하도록 하기 (URL query string 활용) (1) | 2024.06.10 |
[React] useRef 하나로 여러 데이터 관리하기 (feat. ag-grid) (0) | 2024.01.18 |
[FE] 답글 화면 구현하기 (+재귀함수) (feat. React) (0) | 2023.04.02 |
댓글