이챙의 개발 log
Next.js 에서 반응형(Responsive) 작업하기 (window is not defined)
﹒2022. 1. 14.
Next.js 에서 window.innerWidth 값 구하다 window is not defined 오류 발생!
서버사이드 렌더링 할때 서버엔 window , document 객체가 없기 때문에 발생하는 오류이다.
그래서 useEffect or componentDidMount 에서 사용해주어야 한다.
const Project = () => {
const [windowWidth, setWindowWidth] = useState(0)
// resize 될때만 함수 불러오기
let timer
const resizeWindow = () => {
clearTimeout(timer)
timer = setTimeout(() => {
// 현재 window width 값
setWindowWidth(window.innerWidth)
}, 500)
}
useEffect(() => {
setWindowWidth(window.innerWidth)
window.addEventListener("resize", resizeWindow)
return () => {
window.removeEventListener("resize", resizeWindow)
}
}, [windowWidth])
return (<div className={windowWidth >= 1023 ? "on" : ""}>test..</div>)
}
export default Project
간단하게 사용할 수 있는 코드다.
resize가 최종적으로 계산 되었을때만 window width 값을 찍어내기 위해 setTimeout 을 추가했다.
개인적으로 hooks로 따로 빼면 좋을 듯 한데 나중에 추가하도록 하겠다.
'next.js' 카테고리의 다른 글
next.js Text content does not match server-rendered HTML. 에러 해결 (0) | 2022.07.14 |
---|---|
Next.js Image 컴포넌트 경로 설정하기 사용방법(이미지가 안나온다면..?) (0) | 2022.01.20 |
Next.js 에서 material-ui,styled-components 사용🔨 style 새로고침 할때 깜빡임 현상 해결하기 (0) | 2021.09.13 |
Next.js Vercel 로 프론트(static html) 배포하기 (0) | 2021.09.10 |
next.js 데이터 가져오기 getServerSideprops, getStaticProps, getStaticPaths (3) | 2021.08.07 |
이챙(leechaeng)
프론트엔드 개발도 하고 뛰기도 하고