Wrong. It's a template language, even if Facebook tells you otherwise.
return React.createElement(
button,
{ className: "square", onClick: () => this.setState({value: 'X'}) },
this.state.value
);
If you think your code is written in a template language, then the code I just wrote must also be written in a template language (with different syntax).I want to write this, and have it actually be HTML:
<div>
<div>
</div>
<div>
I like HTML.[1]: http://sgmljs.net/docs/templating.html
Disclaimer: my project, and SGML is most certainly not a "lightweight template engine" by any measure
Most use the html+javascript language which is compiled and then spits out JavaScript and html. This is pretty much identical to PHP - which is a preprocessor template language.
Anyway, facebook says it reminds me of a template language, so I'll believe them.
No, it spits out javascript (the exact same javascript that I wrote), which returns shadow DOM trees (which are javascript objects), which the renderer looks at to modify the actual DOM.
Also not sure what you mean by "looks like" javascript. It's clearly javascript - just a function call with 4 arguments.
JSX by its nature statically checks for tag balance, etc. The non-JavaScript part of its syntax has actual semantics. In a template language the non-Turing-complete part of the syntax is just strings.
JSX is a perfectly good notation for describing how data maps to its presentation in a DOM tree.