是的,在没有 else 的情况下编写 do 表达式 是一种有效的语法,它将返回 undefined (void 0)。
let a = do {
if (false) true
}
// a === undefined
我们也可以在不使用 else 的情况下返回一个值,如下所示:
let a = do {
if (false) true
null
}
// a === null
特别是对于ReactJS,我们必须返回一个null,即使使用do 表达式,因为如果它没有返回任何东西,返回值将是@ 987654330@当然会出错破坏组件渲染:
export default function myComponent(props) {
return (
<div>
{do {
if ([condition]) {
<p>If statement is true</p>
}
null
}}
<p>I am always rendered</p>
</div>
);
}
或者,使用Nullish coalescing operator ??,它也会捕获undefined:
export default function myComponent(props) {
return (
<div>
{do {
if ([condition]) {
<p>If statement is true</p>
}
} ?? null}
<p>I am always rendered</p>
</div>
);
}
这里的其他答案表明为什么要使用 do 表达式,因为我们可以使用 Conditional (ternary) operator ?: 来做到这一点,答案是当我们将使用 三元运算符有多个条件不会是语法友好的,它会导致错误渲染和hard time understanding the logic for developers:
export default function myComponent(props) {
return (
<div>
{[condition1]
? <p>If condition1 is true</p> :
[condition2]
? <p>If condition2 is true</p> :
[condition2]
? <p>If condition3 is true</p> :
[condition4]
? <p>If condition4 is true</p> :
null
}
<p>I am always rendered</p>
</div>
);
}
这也是 do 表达式提出和存在的原因之一;它将使多个条件表达式语法友好:
export default function myComponent(props) {
return (
<div>
{do {
if ([condition1]) <p>If condition1 is true</p>
if ([condition2]) <p>If condition2 is true</p>
if ([condition3]) <p>If condition3 is true</p>
if ([condition4]) <p>If condition4 is true</p>
} ?? null}
<p>I am always rendered</p>
</div>
);
}