javascript React -用于枚举属性的双花括号与单花括号的区别

bakd9h0s  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(214)

所以我创造了小提琴:https://jsfiddle.net/4ex7uh8g/
问题是我不明白这把小提琴的特定代码行的语法差异。看看JavaScript标签中的24行。这里它使用了这样的语法:<div style={{...spanStyle}}>我也尝试使用这样的语法:<div style={spanStyle}>,它也能正常工作,当我检查时,样式属性被完全相同地注入,所以对我来说,一切看起来都是一样的,只是语法不同,但我真的不确定,在选择一个属性时,我是否遗漏了什么或误解了什么?
我也读过这个帖子:What do these three dots in React do?
它解释了一些关于三点运算符的内容,我非常熟悉这个扩散运算符,但在我提供的示例中,我仍然看不出扩散运算符有什么区别,它没有分隔属性和值,它的工作原理与{spanStyle}相同,所以对我来说,{{... spanStyle}}和{spanStyle}的作用相同?
如果你能指出其中的区别,我会非常感激,如果有,什么时候,为什么我应该使用一种语法而不是另一种语法。

gywdnpxw

gywdnpxw1#

当使用一对大括号时,你基本上告诉JSX你要嵌入一个JS表达式。当你在第一对中有第二对时,你创建了一个内联的对象常量(就像你已经在JS上下文中一样)。当你通过JSX中的style属性指定样式时,你必须提供一个对象,因此需要双大括号。
使用:

{{...spanStyle}}

只是创建了一个新的对象常量,并使用spread操作符(...)从spanStyle中获取所有属性,因此,正如您已经注意到的,您将获得与简单执行{spanstyle}完全相同的结果,但需要创建一个对象克隆。

vuktfyat

vuktfyat2#

第一个括起来的括号用于javascript评估部分的JSX规范:

<div style={ Javascripty stuff in here }

所以,第一组括号基本上启动了javascript模式,下一组括号位于javascript区域,在javascript中表示{}
最后一块拼图是spread运算符...
当你在另一个对象的声明中对一个对象使用spread操作符时,它会从那个对象中吸取所有的属性,并将其应用到你正在调用的新对象中:

<div style={{...anotherObject}} />

所以,如果你记得第一个括号激活了javascript的东西,这一切开始变得更有意义。

9o685dep

9o685dep3#

您要查找的是排列运算符:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
使用此语法,可以创建新对象,并添加一些属性以覆盖任何原始对象属性。
示例:

const spanStyle = {width: '100%', height: '400px'};

<div style={{...spanStyle, height: 'auto'}}>

如果你不需要覆盖任何东西,只是跳过传播!

相关问题