React

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

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

Reactの学習におすすめ参考書
モダンJavaScriptの基本から始める React実践の教科書

本書情報
著者岡田 拓巳
発売日2021/9/17
ページ数272ページ
Kindle版
レビュー
(Amazon)
(152件)
先輩くん
先輩くん
Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!
後輩ちゃん
後輩ちゃん
初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!

綺麗なコードが書けるようになる!
リーダブルコード-より良いコードを書くためのシンプルで実践的なテクニック

本書情報
出版社オライリージャパン
著者Dustin Boswell / Trevor Foucher
発売日2012/6/23
ページ数260ページ
レビュー
(Amazon)
(620件)
先輩くん
先輩くん
より良いコードを書きたい人におすすめの本だよ!
後輩ちゃん
後輩ちゃん
10以上前の書籍ですが、内容は今でも役に立つものばかりです!

原因と対処法

まずはこのエラーが出力される理由ですが、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アクセスランキング にほんブログ村