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

Posted

技术标签:

【中文标题】Next.js:错误:React.Children.only 预期接收单个 React 元素子项【英文标题】:Next.js: Error: React.Children.only expected to receive a single React element child 【发布时间】:2020-08-22 09:04:03 【问题描述】:

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

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;

这给了我错误:

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

但是,如果我删除 &lt;Link&gt; 组件中的 &lt;a&gt; 标记,我可以查看页面,但是在控制台中我会收到以下警告:

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

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

【问题讨论】:

看起来不错。你确定你在这里收到了孩子的错误,而不是在其他地方...... 删除Link标签和a标签之间的空格。然后给它,&lt;Link href="/"&gt;&lt;a&gt; Home &lt;/a&gt;&lt;/Link&gt; &lt;Link href="/about"&gt;&lt;a&gt; About &lt;/a&gt;&lt;/Link&gt; 哇谢谢@ManirajMurugan,它解决了这个问题。但这很奇怪有一个空间导致这个问题。现在我什至尝试将 也放在单独的行中,这也没有引起任何问题。无论如何谢谢:) @AshanPriyadarshana,下一行不被视为空格,但如果两个标签之间有空格,则被视为子节点 .. 已发布答案并附有删除原因的解释之间的空白..希望它有所帮助.. 我在 Link 标签中有一个评论,然后它被认为是一个子节点,破坏了我的整个应用程序。奇怪的东西... 【参考方案1】:

此问题是由于&lt;Link&gt; 标记和&lt;a&gt; 标记之间的空格

所以改变你的代码,

        <div>
            <Link href="/"><a> Home </a></Link>
            <Link href="/about"><a> About </a></Link>
        </div>

更改原因:

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

->所以有两个子节点(一个是空格,另一个是&lt;a&gt;标签)是无效的,因此会发生这种错误。

【讨论】:

在我的情况下,我认为罪魁祸首是标签后的空格,然后是注释:(&lt;/div&gt; /* So what this does is... */) 谢谢。那些 &lt;React.Fragment&gt;/&lt;&gt;&lt;/&gt;&lt;TransitionGroup&gt; 标签并没有起到作用 我能够用这个解决方案解决它,但我仍然需要更多地说明为什么将空间视为子节点。【参考方案2】:

和 之间的空格会让你出错“未处理的运行时错误 错误:多个孩子被传递给 href/ 但只支持一个孩子 https://nextjs.org/docs/messages/link-multiple-children 打开浏览器的控制台以查看组件堆栈跟踪。” 删除空间,它工作正常!!!

       import Link from "next/link";

const NavBar = () => 返回 (

       <Link href="/"><a>Home </a></Link>
       <Link href="/About"><a>About </a></Link>
        <Link href="/Contact"><a>Contact </a></Link>
    </nav>
)

导出默认导航栏

【讨论】:

【参考方案3】:

我遇到了同样的问题:

<Link href=`/tutorial/$tutorial.slug`>tutorial.title</Link>

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

<Link href=`/tutorial/$tutorial.slug`><a>tutorial.title</a></Link>

【讨论】:

【参考方案4】:

我有一个空间被认为是未定义的组件

<Link href=to><a className='abc'>children</a> </Link>

删除空间,没关系。多亏了经验和互联网帮助,仅损失了 30 分钟。

【讨论】:

以上是关于Next.js:错误:React.Children.only 预期接收单个 React 元素子项的主要内容,如果未能解决你的问题,请参考以下文章

我收到“错误:React.Children.only 预计会收到一个 React 元素子项。”带有 TouchableWithoutFeedback

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

React.Children.only 预计在使用 Ref 时会收到单个 React 元素子错误

React.children.only 期望接收单个反应元素子导航器

React.Children.only 期望接收单个 React 元素子元素。?

如何修复 React.Children.only 期望在 react.js 中接收单个 React 元素子项?