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

标签 javascript babeljs reactjs

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

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

将产生正确的结果:

enter image description here

但我想在引号周围添加双引号,所以我尝试了:

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

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

enter image description here

我期待与此类似的输出,因为它是字符串文字:

enter image description here

为什么它不给我字面上的 "{props.quote}" 因为 {props.quote} 在字符串文字中?这是 Babel 的错误吗?

<小时/>

注意:这是一个 self 问答

最佳答案

输出没有任何奇怪的地方。它正在按预期工作,并且没有错误。

语义

您必须了解的是 JSX 不是 JavaScript。里面div ,这不是字符串文字。它只是一些文本,类似于 HTML 中的文本节点。认为它应该是字符串文字的论点没有意义,因为它不是字符串文字。双引号的处理方式与元素内的任何其他文本一样,并且 {props.quote}被视为内联 JSX 表达式,其中相应地显示其值。您可能对以下内容感到困惑:

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

这里,{ … }是一个内联 JSX 表达式,并被视为元素内的 JavaScript 表达式。因此,它解释为字符串文字,并且会直接给出 "{props.quote}" .

翻译

因为它根本上不是字符串,Babel 不会像这样转译它。使用the Babel REPL ,我们可以看到它被转换成什么:

"use strict";

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

如前所述,双引号的处理方式与元素内的任何其他文本相同。转译后,<div>"{props.quote}"</div>只是一个 div具有以下文本作为子元素的元素:

  • "\""
  • props.quote
  • "\""

双引号成为子文本文本,props.quote 的值用来。 Babel对待开闭{ … }作为内联 JSX 表达式,无论它位于何处(除非在字符串文字内的另一个 JSX 表达式内)。该表达式的计算结果为字符串 The best way to predict the future is to create it在这种情况下。

关于javascript - 为什么这个 JSX 表达式会产生奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023890/

相关文章:

google-chrome - 在 Chrome 45.0.2454.93 中禁用 es6 功能

javascript - 得到预期的赋值或函数调用,而不是在尝试在 React 中呈现组件时看到表达式 no-unused-expressions 错误

javascript - 要求(img 路径)不工作/找不到模块 "."reactjs

javascript - 如何以 jQuery 方式搜索和操作复杂的 JavaScript 对象

javascript - Firebase 3.0 与 webpack 捆绑时抛出跨源错误

javascript - 如何检查哪个 Javascript 文件插入了哪些代码?

javascript - Webpack错误: “You may need an appropriate loader to handle this file type”

javascript - 如何将 ANTD 表文本更改为不同语言

Javascript 变量 a = 函数 b() {}

javascript - 在悬停另一个 div 时隐藏一个 div