@babel/plugin-transform-react-jsx
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Este plugin está incluido en @babel/preset-react
Este plugin genera código JavaScript listo para producción. Si estás desarrollando una aplicación React en un entorno de desarrollo, utiliza @babel/plugin-transform-react-jsx-development para una mejor experiencia de depuración.
Ejemplo
Runtime Automático de React
El runtime automático es una característica añadida en v7.9.0. Con este runtime activado, las funciones a las que JSX se compila se importarán automáticamente.
Entrada
const profile = (
<div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(" ")}</h3>
</div>
);
Salida
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
const profile = _jsxs("div", {
children: [
_jsx("img", {
src: "avatar.png",
className: "profile",
}),
_jsx("h3", {
children: [user.firstName, user.lastName].join(" "),
}),
],
});
Personalización de la Importación Automática
Entrada
/** @jsxImportSource custom-jsx-library */
const profile = (
<div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(" ")}</h3>
</div>
);
Salida
import { jsx as _jsx } from "custom-jsx-library/jsx-runtime";
import { jsxs as _jsxs } from "custom-jsx-library/jsx-runtime";
const profile = _jsxs("div", {
children: [
_jsx("img", {
src: "avatar.png",
className: "profile",
}),
_jsx("h3", {
children: [user.firstName, user.lastName].join(" "),
}),
],
});
Entrada
/** @jsxRuntime classic */
const profile = (
<div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(" ")}</h3>
</div>
);
Salida
const profile = React.createElement(
"div",
null,
React.createElement("img", { src: "avatar.png", className: "profile" }),
React.createElement("h3", null, [user.firstName, user.lastName].join(" "))
);
Runtime Clásico de React
Si no deseas (o no puedes usar) la importación automática, puedes usar el runtime clásico, que es el comportamiento predeterminado para v7 y versiones anteriores.
Entrada
const profile = (
<div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(" ")}</h3>
</div>
);
Salida
const profile = React.createElement(
"div",
null,
React.createElement("img", { src: "avatar.png", className: "profile" }),
React.createElement("h3", null, [user.firstName, user.lastName].join(" "))
);
Personalización de la Importación Clásica
Entrada
/** @jsx Preact.h */
import Preact from "preact";
const profile = (
<div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(" ")}</h3>
</div>
);
Salida
/** @jsx Preact.h */
import Preact from "preact";
const profile = Preact.h(
"div",
null,
Preact.h("img", { src: "avatar.png", className: "profile" }),
Preact.h("h3", null, [user.firstName, user.lastName].join(" "))
);
Fragmentos
Los fragmentos son una característica disponible en React 16.2.0+.
Runtime Automático de React
Entrada
const descriptions = items.map((item) => (
<>
<dt>{item.name}</dt>
<dd>{item.value}</dd>
</>
));
Salida
import { jsxs as _jsxs } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
import { jsx as _jsx } from "react/jsx-runtime";
const descriptions = items.map((item) =>
_jsxs(_Fragment, {
children: [
_jsx("dt", {
children: item.name,
}),
_jsx("dd", {
children: item.value,
}),
],
})
);
Runtime Clásico de React
Entrada
const descriptions = items.map((item) => (
<>
<dt>{item.name}</dt>
<dd>{item.value}</dd>
</>
));
Salida
const descriptions = items.map((item) =>
React.createElement(
React.Fragment,
null,
React.createElement("dt", null, item.name),
React.createElement("dd", null, item.value)
)
);
Personalización con el Runtime Clásico
Entrada
/** @jsx Preact.h */
/** @jsxFrag Preact.Fragment */
import Preact from "preact";
var descriptions = items.map((item) => (
<>
<dt>{item.name}</dt>
<dd>{item.value}</dd>
</>
));
Salida
/** @jsx Preact.h */
/** @jsxFrag Preact.Fragment */
import Preact from "preact";
var descriptions = items.map((item) =>
Preact.h(
Preact.Fragment,
null,
Preact.h("dt", null, item.name),
Preact.h("dd", null, item.value)
)
);
Ten en cuenta que si se especifica una pragma personalizada, también debe especificarse una pragma de fragmento personalizada si se usa la sintaxis de fragmentos <></>. De lo contrario, se lanzará un error.
Instalación
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/plugin-transform-react-jsx
yarn add --dev @babel/plugin-transform-react-jsx
pnpm add --save-dev @babel/plugin-transform-react-jsx
bun add --dev @babel/plugin-transform-react-jsx
Uso
Mediante un archivo de configuración (Recomendado)
Sin opciones:
{
"plugins": ["@babel/plugin-transform-react-jsx"]
}
Con opciones:
{
"plugins": [
[
"@babel/plugin-transform-react-jsx",
{
"throwIfNamespace": false, // defaults to true
"runtime": "automatic", // defaults to classic
"importSource": "custom-jsx-library" // defaults to react
}
]
]
}
Mediante la CLI
babel --plugins @babel/plugin-transform-react-jsx script.js
Mediante la API de Node
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-react-jsx"],
});
Opciones
Ambos Runtimes
throwIfNamespace
boolean, valor predeterminado: true.
Activa/desactiva si se debe lanzar un error cuando se usa un nombre de etiqueta con espacio de nombres XML. Por ejemplo:
Aunque la especificación JSX lo permite, está desactivado por defecto ya que el JSX de React actualmente no lo soporta.
Puedes leer más sobre cómo configurar opciones de plugins aquí
runtime
classic | automatic, valor predeterminado: classic
Añadido en: v7.9.0
Determina qué runtime usar.
automatic importa automáticamente las funciones a las que JSX se transpila. classic no importa nada automáticamente.
Runtime Automático de React
importSource
string, valor predeterminado: react.
Añadido en: v7.9.0
Reemplaza la fuente de importación al importar funciones.
Runtime Clásico de React
pragma
string, valor predeterminado: React.createElement.
Reemplaza la función utilizada al compilar expresiones JSX. Debe ser un nombre calificado (ej. React.createElement) o un identificador (ej. createElement).
Nota: la pragma @jsx React.DOM está obsoleta desde React v0.12
pragmaFrag
string, valor predeterminado: React.Fragment.
Reemplaza el componente utilizado al compilar fragmentos de JSX. Debe ser un nombre de etiqueta JSX válido.
useBuiltIns
boolean, por defecto false.
Al esparcir props, usa Object.assign directamente en lugar del helper extend de Babel.
useSpread
boolean, por defecto false.
Al esparcir props, usa objetos en línea con elementos spread directamente en lugar del helper extend de Babel o Object.assign.