Next.js:错误:React.Children.only 期望接收单个 React 元素子元素

Ash*_*ana 16 html javascript frontend reactjs next.js

我有一个名为Navinsidecomponents目录的组件,它的代码如下所示:

import Link from 'next/link';

const Nav = () => {
    return(
        <div>
            <Link href="/">  <a> Home </a> </Link>
            <Link href="/about"> <a> About </a>  </Link>
        </div>
    )
}

export default Nav;
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

Error: React.Children.only expected to receive a single React element child.

但是如果我删除组件中的<a>标签<Link>,我可以查看页面,但是在控制台中我收到警告:

Warning: You're using a string directly inside <Link>. This usage has been deprecated. Please add an <a> tag as child of <Link>

那么我在这里做错了什么?

Man*_*gan 33

这个问题是由于标签和标签之间的空间造成的。<Link><a>

所以改变你的代码,

        <div>
            <Link href="/"><a> Home </a></Link>
            <Link href="/about"><a> About </a></Link>
        </div>
Run Code Online (Sandbox Code Playgroud)

变更原因:

-><Link>只能有一个子节点,这里linka标签之间的空间被视为子节点。

-> 所以有两个子节点(一个是空间,另一个是<a>标签)是无效的,因此会发生这样的错误。

  • 我能够用这个解决方案解决这个问题,但我仍然需要更多说明为什么空格被视为子节点。 (2认同)

小智 7

< Link > 和 < a > 之间的空格会导致错误“未处理的运行时错误错误:多个子项已传递给hrefof/但仅支持一个子项https://nextjs.org/docs/messages/link-multiple-children 打开您的浏览器的控制台来查看组件堆栈跟踪。”

去掉空格就可以正常工作了。

import Link from "next/link";

const NavBar = () => {
    return (
        <nav>
            
           <Link href="/"><a>Home </a></Link>
           <Link href="/About"><a>About </a></Link>
            <Link href="/Contact"><a>Contact </a></Link>
        </nav>
    )
}

export default NavBar
Run Code Online (Sandbox Code Playgroud)


dea*_*904 5

我遇到了与我所做的相同的问题:

<Link href={`/tutorial/${tutorial.slug}`}>{tutorial.title}</Link>
Run Code Online (Sandbox Code Playgroud)

解决方法是将其包装在a标签中:

<Link href={`/tutorial/${tutorial.slug}`}><a>{tutorial.title}</a></Link>
Run Code Online (Sandbox Code Playgroud)