JSX transpiler. Desugar JSX into JavaScript.
This module aims to be a standard and configurable implementation of JSX decoupled from React.
For linting files containing JSX see JSXHint.
npm install jsx-transform
/** @jsx react.createElement */
var profile = <div>
<img src="avatar.png" class="profile" />
<h3>{[user.firstName, user.lastName].join(' ')}</h3>
</div>;
Transformed into JS:
var profile = react.createElement('div', null, [
h('img', { src: "avatar.png", class: "profile" }),
h('h3', null, [[user.firstName, user.lastName].join(' ')])
]);
/** @jsx h */
var h = require('virtual-dom/h');
var profile = <div>
<img src="avatar.png" class="profile" />
<h3>{[user.firstName, user.lastName].join(' ')}</h3>
</div>;
var h = require('virtual-dom/h');
var profile = h('div', null, [
h('img', { src: "avatar.png", class: "profile" }),
h('h3', null, [[user.firstName, user.lastName].join(' ')])
]);
JSX is a JavaScript XML syntax.
Known tag names are passed as arguments to the ident specified by the @jsx
docblock:
<div class="blue"></div>
=> virtualdom.h('div', { class: 'blue' })
Unknown tags are assumed to be function names in scope:
<FrontPage class="blue"></FrontPage>
=> FrontPage({ class: 'blue' })
Only files with the /** @jsx DOM */
docblock will be parsed unless
options.ignoreDocblock
is set. The constructor name is taken from the @jsx
definition.
/** @jsx React.createElement */
<div>Hello World</div>
is desugared to
React.createElement("div", null, ["Hello World"]);
Use JavaScript expressions as attribute values by wrapping the expression in a pair of curly braces ({}) instead of quotes (""):
<Profile class={state.isLoggedIn ? 'loggedIn' : 'loggedOut'}></Profile>
Profile({ class: state.isLoggedIn ? 'loggedIn' : 'loggedOut' });
Expressions can also express children:
<Profile>{ state.isLoggedIn ? <Settings /> : <CreateAccount /> }</Profile>
Profile(null, [state.isLoggedIn ? Settings(null) : CreateAccount(null)]);
Members
##jsx-transform~transform(str, [options]) Desugar JSX and return transformed string.
Known tags are passed as arguments to JSX ident (assume
@jsx Element
):
<div class="blue"></div>
=> Element('div', { class: 'blue' })
Unknown tags are assumed to be function names in scope:
<FrontPage class="blue"></FrontPage>
=> FrontPage({ class: 'blue' })
If options.docblockUnknownTags
is true
unknown tags are passed to the
docblock ident:
<FrontPage></FrontPage>
=> Element(FrontPage, ...)
Params
- str
String
- [options]
Object
- [ignoreDocblock]
Boolean
- Parse files without docblock. If trueoptions.jsx
must also be set. - [renameAttrs]
Object
- rename attributes while desugaring JSX (i.e.class
toclassName
). - [tags]
Array
- list of known tags (default: exports.tags) - [tagMethods]
Boolean
- use tag name as method of jsx ident instead of argument. If trueDOM.h1()
instead ofDOM("h1")
. - [docblockUnknownTags]
Boolean
- Handle unknown tags like known tags, and pass them as an object to docblock ident. (default: false) - jsx
String
- Constructor name (default: set by docblock).
- [ignoreDocblock]
Scope: inner function of jsx-transform
Returns: String
##jsx-transform~transformFile(path, options)
See module:jsx-transform.transform for usage.
Params
- path
String
- options
Object
Scope: inner function of jsx-transform
Returns: String