在编写反应代码时在jsx中编写if-else不起作用。
<div id={if (condition) { 'msg' }}>Hello World!</div>
然而,使用三元运算符。
<div id={condition ? 'msg' : null}>Hello World!</div>
为什么会这样?
答案 0 :(得分:4)
你的JSX
<div id={condition ? 'msg' : null}>Hello World!</div>
不有效Javascript本身,将编译成以下ReactJS调用:
React.createElement(
'div', // Element "tag" name.
{ id: condition ? 'msg' : null }, // Properties object.
'Hello World!' // Element contents.
);
是有效的Javascript,可以由您的Javascript运行时环境进行解释/编译。正如您所看到的,没有办法将if-else
插入到该语句中,因为它无法编译为有效的Javascript。
您可以改为使用immediately-invoked function expression并传递从内部返回的值:
<div id={(function () {
if (condition) {
return "msg";
} else {
return null;
}
})()}>Hello World!</div>
将编译成以下有效的Javascript:
React.createElement(
"div",
{
id: (function () {
if (condition) {
return "msg";
} else {
return null;
}
})()
},
"Hello World!"
);
答案 1 :(得分:1)
if-else语句不适用于JSX。这是因为JSX只是函数调用和对象构造的语法糖。 React Docs
答案 2 :(得分:0)
// This JSX:
<div id={if (condition) { 'msg' }}>Hello World!</div>
// Is transformed to this JS:
React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");
因此,您会看到/ else是否适合此模型。最好在jsx之外使用它。 可能处于渲染功能。