こんにちは、しのです。
React/Next.jsを勉強していますがタイトルのエラーが出て困っています。解決方法を教えてください。
本日は上記のお悩みを解決します。
こういった記事に長々とした前置きは不要!
早速見ていきましょう!
Error: Invalidwith child. Please remove or use . Learn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor というエラーが出た場合の対処方法
早速ですが、対処方法は以下となります。
・<Link>タグ内のaタグを削除する
・<Link>タグにLegacyBehaviorを追加する
そもそもエラーが出るコード
こちらが表題のエラーが出るコードのサンプルとなります。
import Link from "next/link";
export default function Nav(){
return(
<nav>
<ul>
<li>
<Link href="/" >
<a>HOME<a>
</Link>
</li>
<li>
<Link href="/about">
<a>ABOUT</a>
</Link>
</li>
<li>
<Link href="/blog">
<a>BLOG</a>
</Link>
</li>
</ul>
</nav>
)
}
<Link>タグ内のaタグを削除した場合のコード
import Link from "next/link";
export default function Nav(){
return(
<nav>
<ul>
<li>
<Link href="/" >
HOME
</Link>
</li>
<li>
<Link href="/about">
ABOUT
</Link>
</li>
<li>
<Link href="/blog">
BLOG
</Link>
</li>
</ul>
</nav>
)
}
上記のように<aタグ>を削除することでもエラーが解消するはずです。
<Link>タグにLegacyBehaviorを追加した場合のコード
次に<Link>タグにLegacyBehaviorを追加した場合のコードです。
import Link from "next/link";
export default function Nav(){
return(
<nav>
<ul>
<li>
<Link href="/" LegacyBehavior>
<a>HOME<a>
</Link>
</li>
<li>
<Link href="/about" LegacyBehavior>
<a>ABOUT</a>
</Link>
</li>
<li>
<Link href="/blog" LegacyBehavior>
<a>BLOG</a>
</Link>
</li>
</ul>
</nav>
)
}
このように記述することでも解決するはずです。
そもそもなぜエラーが出るの?
書いてる本通りにコードを書いたのになんでエラーが出るの?
Next.jsはバージョン12.2までは<Link>タグ内に<a>タグを設置する必要があったのですが、12.2以降は<a>タグが不要になったからです。
こちらのNext.jsの公式ドキュメントにも記載があるのでよかったら参考にしてみてください。
書籍はこういったアップデート前の情報が載っている可能性があるため注意が必要ですね。
というわけで本日の記事は以上です!