当前位置: 首页 > 知识库问答 >
问题:

为什么我必须在这个JSX元素中使用spread操作符?

吕皓
2023-03-14

我有一个函数组件,它返回一个锚点元素,该元素可以具有属性href角色,这取决于传递给它的props

function Item(props) {
    return (
        <a {...props.toSubMenu && {role: 'button'}} {...props.href && {href: props.href}}>
            {props.children}
        </a>
    );
}

创建此组件时,我首先尝试通过props,而不使用像这样的扩展运算符:

分析错误:意外令牌,应为“…”

所以目前,我的组件按照我想要的方式工作,但是我不明白为什么我必须使用扩频运算符。在代码的其他部分(如第4行),我不需要它。我已经在这个问题和这个问题以及反应留档中读到过,但我仍然不确定。


共有3个答案

公孙和怡
2023-03-14

在JSX中,{}不会像在许多模板语言中那样输出字符串,您需要将其视为一个赋值,其中左手是属性,现在根据设置属性设置值,只需遵循相同的逻辑:解释为什么错误显示为预期“…”。如果{}不在赋值的右侧,那么您可能希望分散多个属性,因此,请尝试以下方法

function Item(props) {
    return (
        <a role={props.toSubMenu ? 'button' : undefined} href={props.href}>
            {props.children}
        </a>
    );
}
万俟承望
2023-03-14
  • 我从您的代码中提取这个作为示例
function Item(props) {
    return (
        <a {...props.toSubMenu && {role: 'button'}} >
            {props.children}
        </a>
    );
}
  • 让我们假设props.toSubMenu不是null
function Item(props) {
    return (
        <a {role: 'button'} >
            {props.children}
        </a>
    );
}
  • 如果像这样使用扩散运算符
function Item(props) {
    return (
        <a {...props.toSubMenu && ...{role: 'button'}} >
            {props.children}
        </a>
    );
}
  • 它将对象{role:'button'}展开为:
function Item(props) {
    return (
        <a role="button" >
            {props.children}
        </a>
    );
}
  • 有一点要注意:在
{...props.toSubMenu && {role: 'button'}}

最外面的{}不是对象的符号,它是代码段jsx文件中运行的符号。

  • 您不必使用排列操作,这同样有效
function Item(props) {
    return (
        <a role={props.toSubMenu && 'button'} >
            {props.children}
        </a>
    );
}
  • 但是既然角色已经在道具中定义好了,为什么不把它展开呢
许博易
2023-03-14

我想你想给我

function Item(props) {
    return (
        <a role={props.toSubMenu ? 'button' : undefined} href={props.href}>
            {props.children}
        </a>
    );
}

 类似资料:
  • 问题内容: 我创建了一个用于显示工具提示的指令: 对应功能: 应用于此: 这是我观点的一部分,由拥有者的控制器处理 为什么必须调用才能将更改应用到,该更改是早先声明和初始化的? 问题答案: 因为附加到事件的回调超出了angular的范围;angular不知道该函数何时运行/结束,因此摘要循环永远不会运行。 调用或告诉angular更新绑定并触发任何手表。

  • 我正在设计一个网站,在导航我有2个链接有下拉菜单(“关于”和“服务”)。当你将鼠标悬停在链接上时,下拉菜单就会出现,然后当你点击链接时,下拉菜单就会消失,然后如果你再点击它,下拉菜单就会再次出现。所以基本上,为了进入那个页面,你必须三次点击链接。有没有人知道我可以做什么来改变这个,这样你就可以在点击一次后进入页面? 这是导航在我的HTML代码中的样子: 以下是相关的CSS: 编辑:我发现下拉菜单是

  • 关于在最新版本的GCC和Clang中编译有几个问题:实验::filessystems链接器错误 但是现在< code>filesystem已经被c 17接受,所以不再需要< code>experimental或< code>-lstdc fs标志,对吗? 错了,我甚至不能 只给了我< code >实验版本,我怎么能包括正式接受的版本呢?

  • 在Scala表示法中,是一个函数,它接受任何类型并将其映射到所有列表类型集合中的一个类型,例如它将类型映射到类型并映射上的函数 到 到 现在,的每个实例都是一个monoid,具有函数(在Haskell中为)和函数(在Haskell中为)。我的猜测是,可以使用列表是单ID这一事实来说明必须映射列表的所有元素。我在这里的感觉是,如果从Applicative中添加函数,就会得到一个列表,其中只有一个其他

  • 本文向大家介绍React必须使用JSX吗?相关面试题,主要包含被问及React必须使用JSX吗?时的应答技巧和注意事项,需要的朋友参考一下 首先解释一下什么是JSX,是JavaScript的语法扩展,可以让我们编写像html一样的代码,在JSX中使用的”元素“,不局限于HTML中的元素,可以是任何一个react组件。 react判断一个元素是HTML元素还是react 组件的原则就是看第一个字母是

  • 我一直在尝试将一个html网站移植到Gatsbyjs并做出反应。在构建header Comparement时,我在带有的行中得到一个错误“相邻的JSX元素必须包装在一个封闭的标记中”。我想不出这个问题,请你帮忙。我使用有状态组件构建它的原因是,稍后我将向它添加一些额外的功能。 这是我的代码: