【Amazon】人気の商品が日替わりで登場!
毎日お得なタイムセール!商品をみる

【React】validateDOMNesting(…): cannot appear as a descendant of .の原因と対処法

本記事では、ReactでコンソールログにvalidateDOMNesting(…): <x> cannot appear as a descendant of <x>.のエラーが出力された時の原因と対処法について解説しています。

Reactの学習におすすめ書籍
モダンJavaScriptの基本から始める React実践の教科書
総合評価
( 5 )
メリット
  • JavaScriptの基礎から始めてReactの機能を一通り学べる
  • 実務で必要となる知識を意識しながら学習を進められる
  • 現場のシチュエーションベースのストーリーで技術解説
先輩くん

Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!

後輩ちゃん

初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!

全プログラマー必見!
変数名/関数名にもう悩まない!
リーダブルコード
総合評価
( 5 )
メリット
  • 美しいコードが書けるが自然と書けるようになる
  • 他の開発者が理解しやすいコードになる
著:Dustin Boswell, 著:Trevor Foucher, 解説:須藤 功平, 翻訳:角 征典
¥2,640 (2023/07/23 02:48時点 | Amazon調べ)
目次

原因と対処法

まずはこのエラーが出力される理由ですが、HTML5から導入されたコンテンツモデルに定義されたルールに違反しているのが原因です。

例えば、下記のサンプルコードを見てみましょう。

function App() {
  return (
    <p>
      <div>サンプルコード</div>
    </p>
  );
}

export default App;

<p>タグの中に<div>タグを配置しています。コンソールログを確認すると「validateDOMNesting(…):<div> cannot appear as a descendant of <p> .」と出力されています。これを日本語に訳すと<div>タグは<p>タグの子要素として表示できません。という意味になります。

つまり、<p>タグの中に<div>タグを配置することはコンテンツモデルのルールに違反しているということが分かります。これをコンテンツモデルのルールに沿って修正します。

function App() {
  return (
      <div>
        <p>サンプルコード</p>
      </div>
  );
}

export default App;

<div>タグの中に<p>タグを配置する形に置き換えました。これはコンテンツモデルのルール的にOKな書き方になります。これでコンソールログを確認するとエラーが消えています。

参考サイト

HTML5のコンテンツモデルについて知りたい方は、下記のサイトがおすすめです。

おすすめサイト一覧

ブログランキング・にほんブログ村へ PVアクセスランキング にほんブログ村 FC2 Blog Ranking

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次