[Next.js] Hydration failed because the initial UI does not match what was rendered on the server

👀·2022년 8월 29일
0

Next.js의 웹 페이지 구성 원리

Server Side단에서 Pre-Rendering => HTML document 생성 => Client 전송

클라이언트가 받은 웹 페이지는 단순히 웹 화면만 보여주는 HTML일 뿐이고, 자바스크립트 요소들이 없는 상태이다.
이는 웹 화면을 보여주고 있지만, 특정 JS 모듈 뿐 아니라 단순 클릭과 같은 이벤트 리스너들이 각 웹 페이지의 DOM 요소에 하나도 적용되어 있지 않은 상태임을 말한다.

Hydrate

Next.js Server에서는 Pre-Rendering된 웹 페이지를 클라이언트에게 보내고 나서, 바로 리액트가 번들링 된 자바스크립트 코드들을 클라이언트에게 전송한다.

네트워크 탭을 보면, 맨 처음 응답받는 요소가 document Type의 파일이고, 이후에 React 코드들이 렌더링 된 JS 파일들이 Chunk 단위로 다운로드되는 것을 확인할 수 있다.

그리고 이 자바스크립트 코드들이 이전에 보내진 HTML DOM 요소 위에서 한번 더 렌더링을 하면서, 각자 자기 자리를 찾아가며 매칭이 된다.

이 과정을 Hydrate라고 부른다.

Hydrate_
서버사이드단에서 렌더링된 정적 페이지와 번들링된 js코드를 클라이언트에게 보낸 뒤, 
클라이언트단에서 HTMl코드와 JS코드를 서로 매칭시키는 과정.

서버사이드에서 pre-rendering된 React 트리와 브라우저에서 처음 rendering되는 React 트리가 달랐기 때문에 발생한 에러.

출처: https://helloinyong.tistory.com/315

0개의 댓글