Security News
The Push to Ban Ransom Payments Is Gaining Momentum
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
@babel/plugin-transform-react-jsx
Advanced tools
Package description
The @babel/plugin-transform-react-jsx package is a Babel plugin that transforms JSX syntax into standard JavaScript function calls that browsers can understand. JSX is a syntax extension for JavaScript that is typically used with React to describe what the UI should look like. By transforming JSX into JavaScript, this plugin allows developers to write their components in a more readable and expressive way while still being able to run them in environments that do not understand JSX natively.
Transform JSX to React.createElement calls
This feature transforms JSX syntax into equivalent React.createElement calls. The above JSX code would be transformed into something like: React.createElement('div', { className: 'greeting' }, 'Hello, world!');
const element = <div className='greeting'>Hello, world!</div>;
Custom pragma support
This feature allows the use of a custom pragma (a comment that specifies which function to use instead of React.createElement) to tell Babel to use a different function to create elements. The above code would be transformed to use myCreateElement instead of React.createElement.
/** @jsx myCreateElement */ const element = <div className='greeting'>Hello, world!</div>;
Fragment syntax support
This feature supports the transformation of React Fragment syntax into React.createElement calls. The above code would be transformed into React.createElement(React.Fragment, null, React.createElement(ChildA, null), React.createElement(ChildB, null));
const element = <> <ChildA /> <ChildB /> </>;
This package is similar to @babel/plugin-transform-react-jsx but is tailored for Vue.js instead of React. It transforms JSX syntax into Vue's render function calls.
This Babel plugin is designed for the Inferno library, which is similar to React. It transforms JSX into calls that are compatible with Inferno's createElement function.
This package includes a Babel plugin that transforms JSX for the Solid.js library, which is a declarative JavaScript library for building user interfaces, similar to React but with a different reactivity model.
Readme
Turn JSX into React function calls
In
var profile = <div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(' ')}</h3>
</div>;
Out
var profile = React.createElement("div", null,
React.createElement("img", { src: "avatar.png", className: "profile" }),
React.createElement("h3", null, [user.firstName, user.lastName].join(" "))
);
In
/** @jsx dom */
var { dom } = require("deku");
var profile = <div>
<img src="avatar.png" className="profile" />
<h3>{[user.firstName, user.lastName].join(' ')}</h3>
</div>;
Out
/** @jsx dom */
var dom = require("deku").dom;
var profile = dom("div", null,
dom("img", { src: "avatar.png", className: "profile" }),
dom("h3", null, [user.firstName, user.lastName].join(" "))
);
Fragments are a feature available in React 16.2.0+.
In
var descriptions = items.map(item => (
<>
<dt>{item.name}</dt>
<dd>{item.value}</dd>
</>
));
Out
var descriptions = items.map(item => React.createElement(
React.Fragment,
null,
React.createElement("dt", null, item.name),
React.createElement("dd", null, item.value)
));
In
/** @jsx dom */
/** @jsxFrag DomFrag */
var { dom, DomFrag } = require("deku"); // DomFrag is fictional!
var descriptions = items.map(item => (
<>
<dt>{item.name}</dt>
<dd>{item.value}</dd>
</>
));
Out
/** @jsx dom */
/** @jsxFrag DomFrag */
var { dom, DomFrag } = require("deku"); // DomFrag is fictional!
var descriptions = items.map(item => dom(
DomFrag,
null,
dom("dt", null, item.name),
dom("dd", null, item.value)
));
Note that if a custom pragma is specified, then a custom fragment pragma must also be specified if the <></>
is used. Otherwise, an error will be thrown.
npm install --save-dev @babel/plugin-transform-react-jsx
.babelrc
(Recommended).babelrc
Without options:
{
"plugins": ["@babel/transform-react-jsx"]
}
With options:
{
"plugins": [
["@babel/transform-react-jsx", {
"pragma": "dom", // default pragma is React.createElement
"pragmaFrag": "DomFrag", // default is React.Fragment
"throwIfNamespace": false // defaults to true
}]
]
}
babel --plugins @babel/transform-react-jsx script.js
require("@babel/core").transform("code", {
plugins: ["@babel/transform-react-jsx"]
});
pragma
string
, defaults to React.createElement
.
Replace the function used when compiling JSX expressions.
Note that the @jsx React.DOM
pragma has been deprecated as of React v0.12
pragmaFrag
string
, defaults to React.Fragment
.
Replace the component used when compiling JSX fragments.
useBuiltIns
boolean
, defaults to false
.
When spreading props, use Object.assign
directly instead of Babel's extend helper.
throwIfNamespace
boolean
, defaults to true
.
Toggles whether or not to throw an error if a XML namespaced tag name is used. For example:
<f:image />
Though the JSX spec allows this, it is disabled by default since React's JSX does not currently have support for it.
FAQs
Turn JSX into React function calls
We found that @babel/plugin-transform-react-jsx demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
Application Security
New SEC disclosure rules aim to enforce timely cyber incident reporting, but fear of job loss and inadequate resources lead to significant underreporting.
Security News
The Python Software Foundation has secured a 5-year sponsorship from Fastly that supports PSF's activities and events, most notably the security and reliability of the Python Package Index (PyPI).