跳至主要内容

@babel/plugin-proposal-do-expressions

详情

do { .. } 表达式执行一个代码块(其中包含一个或多个语句),代码块中最后一个语句的完成值将成为 do 表达式的完成值。

来自 你不懂 JS,类型与语法 -> 第 5 章 -> 语句完成值

它可以被视为 三元运算符 的复杂版本

JavaScript
let a = do {
if (x > 10) {
("big");
} else {
("small");
}
};
// is equivalent to:
let a = x > 10 ? "big" : "small";

这个例子不是最佳用法,因为它太简单了,使用三元运算符是更好的选择,但你可以在 do { ... } 表达式中使用更复杂的条件,包含多个 if ... else 链。

JavaScript
let x = 100;
let y = 20;

let a = do {
if (x > 10) {
if (y > 20) {
("big x, big y");
} else {
("big x, small y");
}
} else {
if (y > 10) {
("small x, big y");
} else {
("small x, small y");
}
}
};

示例

在 JSX 中

do 表达式最有用的用法之一是在 JSX 中。如果我们想有条件地显示一个组件,我们通常必须调用另一个函数来实现条件并返回正确的值,例如

JavaScript
const getColoredComponent = color => {
if (color === "blue") {
return <BlueComponent />;
}
if (color === "red") {
return <RedComponent />;
}
if (color === "green") {
return <GreenComponent />;
}
};

const Component = props => (
<div className="myComponent">{getColoredComponent()}</div>
);

使用 do 表达式,你可以在 JSX 中添加逻辑

JavaScript
const Component = props => (
<div className="myComponent">
{do {
if (color === "blue") {
<BlueComponent />;
} else if (color === "red") {
<RedComponent />;
} else if (color === "green") {
<GreenComponent />;
}
}}
</div>
);

安装

npm install --save-dev @babel/plugin-proposal-do-expressions

用法

babel.config.json
{
"plugins": ["@babel/plugin-proposal-do-expressions"]
}

通过 CLI

Shell
babel --plugins @babel/plugin-proposal-do-expressions script.js

通过 Node API

JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-proposal-do-expressions"],
});

参考资料