为什么在反应 jsx 中使用时 if-else 条件不起作用

cry*_*ker 5 javascript jsx reactjs react-jsx

在编写反应代码时在 jsx 中编写 if-else 不起作用。

<div id={if (condition) { 'msg' }}>Hello World!</div>
Run Code Online (Sandbox Code Playgroud)

但是使用三元运算符有效。

<div id={condition ? 'msg' : null}>Hello World!</div>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Joh*_*isz 4

您的 JSX

<div id={condition ? 'msg' : null}>Hello World!</div>
Run Code Online (Sandbox Code Playgroud)

它本身不是有效的 Javascript,将被编译为以下 ReactJS 调用:

React.createElement(
  'div',                            // Element "tag" name.
  { id: condition ? 'msg' : null }, // Properties object.
  'Hello World!'                    // Element contents.
);
Run Code Online (Sandbox Code Playgroud)

有效的 Javascript,可以由 Javascript 运行时环境解释/编译。正如您所看到的,无法将 an 插入if-else到该语句中,因为它无法编译为有效的 Javascript。


您可以改为使用立即调用的函数表达式并传递从内部返回的值:

<div id={(function () {
    if (condition) {
        return "msg";
    } else {
        return null;
    }
})()}>Hello World!</div>
Run Code Online (Sandbox Code Playgroud)

它将编译成以下有效的 Javascript:

React.createElement(
    "div",
    {
        id: (function () {
            if (condition) {
                return "msg";
            } else {
                return null;
            }
        })()
    },
    "Hello World!"
);
Run Code Online (Sandbox Code Playgroud)