React18+Next.jsにおけるHydration failedについて

8735 ワード

はじめに

React18+Next.jsで開発をしていたところ初見のエラーに遭遇しました。
エラーの原因が長らくわかりませんでしたが、なんとか解決できたのでその知見を紹介したいと思います。

エラー内容

エラー内容は

Error: Hydration failed because the initial UI does not match what was rendered on the server.

「初期UIがサーバでレンダリングされたものと一致しないためHydrationに失敗しました。」という意味になります。ここでHydrationについて考えます。

Hydrationとは

Next.jsでは生成されたHTMLが、そのページに必要な最小限のJavaScriptのコードと関連付けられることで、ブラウザがページを読み込んだ際に、そのJavaScriptが実行されページが操作可能(インタラクティブ)になります。この過程をHydrationといいます。