2021/04/11
ReactでSPAを開発していたところ,Warning: validateDOMNesting(...): <input> cannot appear ...
という警告が表示された.
はじめは訳がわからなかったが,最終的には解決できた.
TL;DR
<tr>
直下に<input>
タグを入れるのはやめ,<td>
を一度はさもう!
警告ログ抜粋
Warning: validateDOMNesting(...): <input> cannot appear as a child of <tr>.
at input
at tr
at table
... # この先は,ネストされたコンポーネントが順に表示される
原因
以下の文は,
Warning: validateDOMNesting(...): <input> cannot appear as a child of <tr>.
「<tr>
の下に<input>
は入れられないよ!」みたいなことを言っている.
実は,警告が出ているが,アプリの見た目自体は希望通りに表示されており,何が問題なのかわからなかった.
しかし,よくよく探ってみると,<tr>
の下に<td>
を入れなければならないようで,以下のように変更を加えた.
<tr>
<td>hogehoge</td>
<input />
</tr>
↓
<tr>
<td>hogehoge</td>
<td>
<input />
</td>
</tr>
以上で,上述した警告は表示されなくなった.
おまけ
<tr>
の下に<input>
があるのが問題なのかと思い,<tr>
を消して<table>
の下に<input>
が来るようにしたところ,
以下の警告が出力された.
Warning: validateDOMNesting(...): <input> cannot appear as a child of <table>.
これを踏まえると,<table><tr><td>
の下に<input>
を入れなくてはならないらしい.