# 내용
nextjs 에서 styled-components 사용 중 발생한 오류
내용 그대로 클래스 명이 맞지 않아서 생긴 오류
Warning: Prop `className` did not match.
Server: "ant-input-group-wrapper ant-input-search ant-input-search-with-button sc-hKwDye jIYbso"
Client: "ant-input-group-wrapper ant-input-search ant-input-search-with-button sc-gsDKAQ dxgLeb"
# 원인
nextjs 는 최초 렝더링을 서버가 담당함 (SSR)
> 최초에 서버에서 해시+클래스명으로 생성함
이후 클라이언트에서 렌더링 수행함 (CSR)
> 이후 클라이언트 사이드의 해시+클래스명이 달라짐
Warning: Prop `className` did not match.
Server: "ant-input-group-wrapper ant-input-search ant-input-search-with-button sc-hKwDye jIYbso"
Client: "ant-input-group-wrapper ant-input-search ant-input-search-with-button sc-gsDKAQ dxgLeb"
이를 맞춰주는 작업을 babel을 통해 해야함
# 해결법
1. babel-plugin 설치
npm i -D babel-plugin-styled-component
2. 프로젝트 루트 경로에 .babelrc 파일 생성 후 아래 내용 작성
{
"presets": ["next/babel"],
"plugins": ["babel-plugin-styled-components"]
}
- 추가로 babel-plugin-styled-components에 옵션을 줄 수도 있습니다.
{
"presets": ["next/babel"],
"plugins": [
[
"babel-plugin-styled-components",
{
ssr: true,
displayName: true,
preprocess: false
}
]
]
}
- 참고
'client > mystackoverflow' 카테고리의 다른 글
[error] TypeError: middleware is not a function (0) | 2022.03.26 |
---|---|
[error] TypeError: Cannot read property 'isLoggedIn' of undefined (feat. redux initialState ) (0) | 2022.03.26 |