Alternative JSX renderer. Creates plain DOM nodes instead of React objects.
JSX doesn't have to be used with React. If you add /** @jsx foo */ at the top of your script, the JSX transformer will use foo instead of React.createElement as your rendering function.
Use plainJSX as your rendering function and you'll get real elements that you can append directly to the DOM.
For example, if you put this through Babel (try it in the REPL):
/** @jsx plainJSX */
document.body.appendChild(
<section>
<h1>ABC</h1>
<ul class="list">
{['A', 'B', 'C'].map(letter => <li>{letter}</li>)}
</ul>
</section>
);...you get this:
/** @jsx plainJSX */
document.body.appendChild(plainJSX(
'section',
null,
plainJSX(
'h1',
null,
'ABC'
),
plainJSX(
'ul',
{ 'class': 'list' },
['A', 'B', 'C'].map(function (letter) {
return plainJSX(
'li',
null,
letter
);
})
)
));For this output to run, you just need the plainJSX global to exist:
<script src="plain-jsx/index.js"></script>It's a tiny function that returns real DOM elements, constructed using nothing but document.createElement, .setAttribute, .appendChild, document.createTextNode.
$ bower install --save plain-jsxOr:
$ npm install --save-dev plain-jsxOr you could just copy and paste the plainJSX function into your app.
Seems to work fine. But it could do with some tests – PRs welcome!
MIT