React 的 JSX 语法中双花括号的目的是什么?

IT技术 javascript reactjs
2021-04-08 11:36:31

react.js 教程我们看到双花括号的这种用法:

<span dangerouslySetInnerHTML={{ __html: rawMarkup }} />

然后在第二个教程中,“在react中思考”

 <span style={{ color: 'red' }}>
     {this.props.product.name}
 </span>;

然而,React JSX 文档没有描述或提到双花括号。这是什么语法(双curl)?有没有另一种方法可以在 jsx 中表达同样的东西,或者这只是文档中的一个遗漏?

6个回答

它只是一个内联在 prop 值中的对象字面量。它与

var obj = {__html: rawMarkup};

<span dangerouslySetInnerHTML={obj} />
@BenAlpert 有空时我会很高兴。奇怪的是,我实际上很喜欢编辑文档(以前是法律期刊的编辑)并且可能还有其他一些改进。PS,还住在博尔德吗?让我们找个时间喝杯咖啡或吃午饭……认识一个了解 React 内部消息的人会很好,因为我们刚刚开始一个大项目。
2021-05-24 11:36:31
@BenAlpert你碰巧知道在想些什么落后使得它什么dangerouslySetInnerHTML={__html: rawMarkup}代替dangerouslySetInnerHTML={rawMarkup}是因为对象{__html: rawMarkup}是可变的而字符串不是吗?
2021-05-28 11:36:31
@BenRoberts 太好了,谢谢!不幸的是,这些天我在加利福尼亚,但请随时访问 freenode 上的 #reactjs IRC 房间,我很乐意回答问题。
2021-05-30 11:36:31

花括号在这里有 2 个用法:-

  1. { .. } 计算结果为 JSX 中的表达式。
  2. { key: value } 表示一个 javascript 对象。

让我们看一个简单的例子。

<Image source={pic} style={{width: 193}}/>

如果你观察pic被大括号包围。这就是嵌入变量的 JSX 方式。pic可以是任何 Javascript 表达式/变量/对象。您也可以执行类似 { 2+3 } 的操作,它的计算结果为 { 5 }

让我们在这里剖析一下风格。 {width: 193}是一个 Javascript 对象。要将这个对象嵌入到 JSX 中,你需要花括号,因此,{ {width: 193} }

注意:要在 JSX 中嵌入任何类型的 Javascript 表达式/变量/对象,您需要花括号。

@RohitMandiwal 谢谢先生。我知道当你把一个大括号放在另一个里面时会有点混乱。
2021-05-31 11:36:31
对 React 中双花括号的解释真是太好了!非常感谢你!我会将这个答案投票为最实用的解释。
2021-06-06 11:36:31

标记中{{color: 'red'}}使用的语法style因为根据React 文档,该style属性接受具有驼峰式属性JavaScript 对象而不是CSS 字符串

<span style={{color: 'red'}}>
    {this.props.product.name}
</span>;

React 使用 JSX,在 JSX 中评估任何变量、状态对象、表达式等都必须包含在 {} 中。

在 JSX 中提供内联样式时,它必须被指定为一个对象,因此它必须再次位于花括号内。{}。

这就是有两对花括号的原因

这意味着不是声明一个设置为预期样式属性的对象的样式变量,而是只需在对象中设置样式属性......这通常是当您要添加的样式很少但对于需要更多样式的元素声明样式变量会更清晰

例如对于具有较少样式属性的元素执行此操作

<span style={{color: 'red'}}>
  {this.props.product.name}
</span>

对于具有更多样式属性的 HTML 元素,请执行此操作

const spanStyle = {
   backgroundColor: 'red',
   color: 'grey',
   margin: '-25px'
}

然后你用 jsx 语法调用它

<span style={spanStyle}>
  {this.props.product.name}
</span>