less than 1 minute read

어떤 에러?

Warning: Prop `className` did not match. Server: ~~~~

Next.js를 공부하면서 styled-components를 사용중인데,

처음 스타일들을 적용하고 렌더링 할때는 문제없이 스타일들이 렌더링 되는데,

새로고침을 하면 Warning : Prop 'className' did not match. 라는 오류가 뜨면서 스타일이 사라졌다.

Next.js는 SSR이므로 첫 페이지가 렌더링 될 때는

SSR로 작동이 되고, 이후 새로고침을 하게 되면 CSR로 작동이 되는데,

이때 처음 SSR로 작동됐을 때의 해시 + 클래스명과

새로고침 후 CSR로 작동됐을 때의 해시 + 클래스명이 달라서 스타일을 불러올 수 없는 오류였다.

어떻게 해결?

server와 client의 클래스명을 일치시켜주는 플러그인인 바벨 플러그인 babel-plugin-styled-components 를 설치한 뒤 바벨 설정을 추가했다.

프로젝트 루트경로에 .babelrc 파일을 추가한 뒤 아래와 같이 코드를 추가해준다.

{
  "presets": ["next/babel"],
  "plugins": ["babel-plugin-styled-components"]
}

(Next.js에서 바벨 설정을 추가할 때는 next/babel 프리셋을 꼭 추가해야 한다)

이렇게 설정을 마친 뒤, 서버를 재시작 하면

오류 코드가 뜨지 않고, 새로고침을 해도 스타일이 유지된다.

Updated: