[Next][Error] Hydration failed because the initial UI does not match what was rendered on the server. 발생 시
마릴린벅시
2022. 10. 10. 16:58ㆍ프론트엔드
보통 이 에러는 서버에서 pre-rendering 된 html과 브라우저에 처음 렌더링 되는 html이 다를 때 발생한다.
하이드레이션이란건 간단하게 nextJS가 pre-rendering한 html에 js코드로 기능을 적셔서 완성하는 것을 말한다.
그래서 순서는 pre-rendering한 html -> js코드 로드 -> hydration => 사용자가 사용할 수 있는 화면 완성 이다.
이 때 pre-rendering한 html의 DOM구조가 hydration중에 발생하는 html DOM구조와 달라서, 이 둘의 구조가 불일치하여 더 이상 하이드레이션을 진행할 수 없다는 에러인데,
나 같은 경우는 이 에러가 전혀 상관 없는 상황에서 발생했다. 그리고 원인은 어이없게도 p태그 안에 p태그 또는 Link컴포넌트를 사용했을 때 발생했다. 물론 아래와 같은 구조로 html을 짜는건 올바르지 않은 방법이지만, 그렇다고 크리티컬한 에러를 발생하는 것은 아니기 때문에 에러 원인을 찾는 데 한참이 걸렸다. 무엇보다 에러 메세지가 저런식이니 이게 p태그 안에 뭘 잘못 써서 나는 에러라고는 상상도 못했다.
<p>
<p>에러발생</p>
</p>
<!-- 또는 -->
<p>
<Link href="#"><a>에러발생</a></Link>
</p>
문제 해결은 아래와 같이 하였다.
<p>에러 안 발생</p>
<!-- 또는 -->
<div>
<Link href="#"><a>에러 안 발생</a></Link>
</div>
반응형
'프론트엔드' 카테고리의 다른 글
[NextJS] Next에서 페이지에 심은 meta태그가 pre-render되지 않는 문제 해결. (1) | 2022.12.17 |
---|---|
[Next] next-export-i18n 사용 시 lang 쿼리 파라미터 자동으로 붙이기 (0) | 2022.11.09 |
[MDN] MIME 타입이란? (1) | 2022.10.08 |
[React] 클라이언트에서 pagination 구현하기 2. (복잡버전) (0) | 2022.09.27 |
[React] 클라이언트에서 pagination 구현하기 1. (심플버전) (0) | 2022.09.27 |