Hydration failed エラーを解決する

힘센캥거루
2024년 12월 16일(수정됨)
2
72

1. 問題発見

自分が作った給食サイトを見ていたら、突然以下のような問題を発見した。

ああ... こんな問題耐えられない...

Hydration failed エラーを解決する-1

クリックして入ってみたら、Hydration failed という内容だった。

簡単にまとめると、サーバーでレンダリングしたページとクライアントに見えるページが違うということ。

原因は様々だという。

Hydration failed エラーを解決する-2

2. 公式ドキュメント

Nextjs公式ドキュメントには、hydration errorの原因として以下の内容が指摘されていた。

  1. 間違ったHTMLタグの使用

    1. <p>タグ内の<p>タグのネスト

    2. <p>タグ内の<div>タグのネスト

    3. <p>タグ内の<ul>タグや<ol>タグのネスト

  2. typeof window !== 'undefined'のようなロジックの使用

  3. レンダリングロジックでwindowlocalStorageのようなブラウザ用APIを使用

  4. レンダリングロジックにDate()のような時間依存APIを使用

  5. HTMLを修正するブラウザ拡張プログラム

  6. 間違ったCSS in JSライブラリ

  7. Cloudflare自動縮小のようなHTML応答を修正しようとする誤って構成されたEdge/CDN

しかし、何度見ても該当するものが何もなかった。

そこで、最初から最後までデバッグを行うことにした。

3. デバッグプロセス

コードを一行ずつコメントアウトして保存しながら、どの部分がエラーを出しているのかを探した。

あら、これだからdev環境で開発するんですね。

Hydration failed エラーを解決する-3

そのようにしてエラーを見つけていったところ、Lunchコンポーネントでエラーが発生していることが判明した...

わかりました...

それで、すぐにLunchに入り、また一つ一つコメントアウトしてみた。

Hydration failed エラーを解決する-4

やっているとおかしいことに、inputタグがhydration failedの原因だった。

いろいろな方法で試してみたが、scale-0、opacity-0など、要素を隠すすべてのclassNameがエラーを引き起こした!

新しく変更しようと思ったが、気に入らないし面倒くさかった。

4. 解決策

Hydration failed エラーを解決する-5

こんな無駄なエラーは無視するのが答えだ。

大したことないのにいたずら好きですね。

該当要素にsuppressHydrationWarning属性を追加する。

Hydration failed エラーを解決する-6

そうすると、エラーが出なくなる。

5. 後記

私と同じ状況になることはなく、かなり迷った。

プログラミングを独学していると、時には簡単な問題でも非常に時間がかかることが多い。

この記事が少しでも役に立てばと思う。

관련 글

Next.js フルスタックブログ開発記
Next.js フルスタックブログ開発記
Web開発に初めて触れてから1年ほど経った頃、自分だけのブログを持ちたいと思うようになった。そこで、およそ6か月これだけにかかりきりになって作ってみることにした。フロントエンド側の機能については、下記のキム・ドヒョンさんのブログを参考にするだけで十分だと思う。自分も mdx を使ってブログを作るだけ...
Caddyを利用した Next.js 無停止デプロイ(ローカルサーバー)
Caddyを利用した Next.js 無停止デプロイ(ローカルサーバー)
ホームページに何かをちょこちょこ載せたくなるたびにビルドしていたら、そのタイミング에 가끔 접속하는人がいるようだった。そうしているうちに、サーチコンソールでスコアがどんどん下がる現象が起きた。このままではまずいと思い、無停止デプロイをする方法を考えてみることにした。1. プロジェクトフォルダ2つ+...
Google検索インデックスの自動化 - Web Search Indexing API
Google検索インデックスの自動化 - Web Search Indexing API
前回の IndexNow に続いて、Google でも自動化してみることにした。調べてみると、Google は API として Web Search Indexing というものを提供していた。1. 対象範囲公式にこの API がサポートしている範囲は、求人情報とストリーミング動画サービスである。リ...
検索インデックス生成の自動化 - IndexNow
検索インデックス生成の自動化 - IndexNow
Bingにサイト登録をしている途中で知ったのだが、Bingでは IndexNow という機能を提供している。ポイントは、APIキーを使って、記事を書いた直後にすぐインデックス作成リクエストを飛ばせるということ。下のようなリクエストを fetch で作り、投稿機能に連動させておけば、記事をDBに保存す...
Nextjs、React サーバーがハッキングされた経験
Nextjs、React サーバーがハッキングされた経験
最初にセキュリティ問題に気づいたのは、12月5日の未明だった。React で認証なしにリモートコード実行が可能だということ。そのニュースを見て他の人には共有したものの、自分は大丈夫だろうと思って特に気にも留めなかった。1. ハッキングの痕跡を発見ところが、ブログのコードを更新しようとアクセスしてみる...
ブログに多言語機能を追加する(NextJS・next-intl・Vercel AI SDK)
ブログに多言語機能を追加する(NextJS・next-intl・Vercel AI SDK)
最近、ブログに多言語対応機能が必要だと感じた。そこで next-intl を使って多言語サービスを実装してみることにした。1.i18nまず多言語サービスを行うときには、守るべき原則がある。これを internationalization と呼ぶが、かなり長いので、先頭の i と末尾の n、そしてその...

댓글을 불러오는 중...