【发布时间】:2020-04-02 09:45:14
【问题描述】:
在继续之前,我应该提一下,是的,我已经阅读了关于“Use if statement in React JSX”及其在 SO 和其他地方的不同变体的问题和答案。
然而,这些帖子更多地是关于 如何 在不使用 JSX 语句的情况下解决问题。我想知道 为什么 语句在 JSX 中是不允许的,我找不到任何帖子。
我正在阅读名为“If-Else in JSX”的官方文档,给出的原因是,引用,
JSX 只是函数调用和对象构造的语法糖
他们继续对比以下两段代码,第一段有效,第二段无效:
这是有效的:
// This JSX:
ReactDOM.render(<div id="msg">Hello World!</div>, mountNode);
// Is transformed to this JS:
ReactDOM.render(React.createElement("div", {id:"msg"}, "Hello World!"), mountNode);
这是无效的:
// This JSX:
<div id={if (condition) { 'msg' }}>Hello World!</div>
// Is transformed to this JS:
React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");
我真的很想了解这一点。首先,在第二个示例中,我从未想过在 HTML 元素的 id 属性中编写 JavaScript。事实上,这是我第一次看到在 id 属性中使用的任何类型的代码。如果我要尝试编写一个 if 条件,我会在渲染返回表达式中用花括号来做,作为其他有效 JS 的天真模拟(如 map 或三元表达式)。
render() {
return (
{if ...
}
)
我毫不怀疑,对于本文档的作者来说,这个稍微不正统的示例解释了他们的断言,即“JSX 只是函数调用和对象构造的语法糖”,但我不知道如何解释。
p>【问题讨论】:
-
您提供的代码在每个字母中都相同。
-
valid和not valid是一样的 -
函数的参数(或对象文字的值,在你的情况下)必须是表达式。
({ id: if (condition) { 'msg' }})是语法错误。 -
哎呀抱歉剪错了。但是文档页面的链接可以看到确切的示例。
-
这些例子告诉你为什么。如果你在 JSX 中有语句,它会被转换为函数调用和对象字面量有语法错误。
标签: javascript reactjs