@babel/plugin-proposal-do-expressions
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Detalles
La expresión
do { .. }ejecuta un bloque (con una o varias sentencias dentro), y el valor de finalización de la última sentencia dentro del bloque se convierte en el valor de finalización de la expresión do.
extraído de You Don't Know JS, Tipos y Gramática -> Capítulo 5 -> Sección Valores de Finalización de Sentencias
Puede considerarse como una versión compleja del operador ternario:
let a = do {
if (x > 10) {
("big");
} else {
("small");
}
};
// is equivalent to:
let a = x > 10 ? "big" : "small";
Este ejemplo no representa el mejor uso porque es demasiado simple y sería preferible emplear un operador ternario, pero puedes tener condiciones mucho más complejas en la expresión do { ... } con varias cadenas if ... else:
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");
}
}
};
Ejemplo
En JSX
Uno de los usos más prácticos de la expresión do es dentro de JSX. Si queremos mostrar un componente condicionalmente, normalmente debemos llamar a otra función que implemente la condición y devuelva el valor correcto, por ejemplo:
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>
);
Con una expresión do puedes añadir lógica directamente dentro de JSX:
const Component = props => (
<div className="myComponent">
{do {
if (color === "blue") {
<BlueComponent />;
} else if (color === "red") {
<RedComponent />;
} else if (color === "green") {
<GreenComponent />;
}
}}
</div>
);
Instalación
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/plugin-proposal-do-expressions
yarn add --dev @babel/plugin-proposal-do-expressions
pnpm add --save-dev @babel/plugin-proposal-do-expressions
bun add --dev @babel/plugin-proposal-do-expressions
Uso
Mediante un archivo de configuración (Recomendado)
{
"plugins": ["@babel/plugin-proposal-do-expressions"]
}
Mediante la CLI
babel --plugins @babel/plugin-proposal-do-expressions script.js
Mediante la API de Node
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-proposal-do-expressions"],
});
Referencias
-
Muy útil para condiciones dentro de JSX: reactjs/react-future#35