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

为什么这个JSX表达式会产生一个奇怪的结果?

宁鹏程
2023-03-14

当我发现这个奇怪的东西时,我正在玩JSX。使用以下JSX:

<div>{props.quote}</div>

会产生正确的结果:

但我想在引号周围添加双引号,因此我尝试:

<div>"{props.quote}"</div>

令我惊讶的是,它给出了正确的输出:

我希望得到类似的输出,因为它是字符串文字:

既然{props.quote}在字符串文本中,它为什么不按字面意思告诉我{props.quote}?这是巴贝尔的错误吗?

注意:这是一个自我提问和回答

共有2个答案

左劲
2023-03-14

你可以那样做

<div>{`"${props.quote}"`}</div>
太叔京
2023-03-14

输出一点也不奇怪。它按预期工作,没有bug。

您必须了解的是,JSX不是JavaScript。在div中,这不是字符串文本。它只是一些文本,类似于HTML中的文本节点。它应该是字符串文字的论点没有意义,因为它不是字符串文字。双引号被视为元素中的任何其他文本,而{props.quote}被视为一个内联JSX表达式,其值将相应地显示出来。您可能会将其与以下内容混淆:

<div>"{"{props.quote}"}"</div>

这里,{…}是一个内联JSX表达式,在元素中被视为JavaScript表达式。因此,它被解释为一个字符串文本,并将从字面上为您提供“{props.quote}”

因为它根本不是一个字符串字面,巴别塔不会这样转置它。使用巴别塔REPL,我们可以看到它被转换成什么:

"use strict";

React.createElement(
  "div",
  null,
  "\"",
  props.quote,
  "\""
);

如前所述,双引号被视为元素中的任何其他文本。一旦转置,

  • “\”
  • props.quote
  • “\”

双引号作为子项变成文本,并使用props.quote的值。Babel将开始和结束的{…}视为一个内联JSX表达式,而不管它位于何处(除非在字符串文本中的另一个JSX表达式中)。该表达式的计算结果为字符串,在本例中,预测未来的最佳方法是创建它。

 类似资料:
  • 而不是显示“diserahkan”,其结果是“diserahkannya”。因此,在尝试替换操作时,并不满足所有条件。为什么会这样?Im使用Java并使用Matcher中的replaceAll方法

  • 为什么以下未有效使用的行(在方法中:getAllDefinedVars)会对最终结果产生影响: List collect=AllVars.Stream().Filter(v->false).collect(Collectors.ToList()); 如果我删除整个方法和调用此方法的一行代码(generateOneSetOfBools中的第一行),我最终会得到另一个结果。 如果... 提到的行对列表

  • 所以浮点运算是不精确的,但这并不能完全解释这里发生的事情:

  • 我收到一个错误: /app处的OS错误/ [Errno 63]文件名太长:"/Users/XXX/test app/templates/jinja 2/{ ' items ':[{ '-':'-',' A': 'a ',' B': 'b ',' C: 'c ',' D': 'd'}]} 我想将json_parse方法的结果的<code>json_dict</code>嵌入到<code>视图中。将复

  • 当我跑的时候 我在Java中得到错误。为什么?这相当于false==false,这是真的。这不是Java特有的,我在其他语言中也得到了相同的结果。这是因为短路评估吗?似乎左右双方仍会/应该进行比较。

  • 问题内容: 我正在使用Python 3.6.1,但遇到了一些非常奇怪的事情。我有一个简单的字典作业错字,花了很长时间才找到。 输出量 代码在做什么?IMO应该什么时候都没有提出。起初,我认为它正在创建一个切片。但是,键入会引发一个。我也输入了控制台,但控制台没有打印任何内容。我以为也许它回来了,但是我不太确定。 我还认为这可能是单行if语句,但这也不应该是正确的语法。 此外,应提出一个。 我很困惑