在继续之前,我应该提到是的,我已经阅读了关于“在 React JSX 中使用 if 语句”及其在 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!");
我真的很想在幕后了解这一点。首先,在第二个示例中,我从未想过在id
HTML 元素的属性中编写 JavaScript 。事实上,这是我第一次看到 id 属性中使用的任何类型的代码。如果我要尝试编写一个 if 条件,我只会在渲染返回表达式中的花括号中完成它,作为其他有效的 JS(如映射或三元表达式)的简单模拟。
render() {
return (
{if ...
}
)
我毫不怀疑,本文档的作者非常清楚这个略显非正统的例子解释了他们的断言“JSX 只是函数调用和对象构造的语法糖”,但我无法弄清楚如何。