Why is this good?
1. Let's say I want to stick a debugger in my template or render function. How would you do it in Vue? Angular? I don't know, gotta look it up, not even sure if possible. How would you do it in React? I don't have to look anything up, I just have to think (use an iife):
<div>
<SomeComponent
debug={(() => { this.state; debugger; })()}
someProp="prop"
/>
</div>
2. Let's say I want to use Immutable.JS instead of plain js arrays. How would I iterate over an immutable list in Vue. In Angular? I don't know, probably have to download some third party directive. React: <ul>
{immutable.toSeq().map(x => <li>x</li>)}
</ul>People seem to think using a familiar templating language excludes using the full power of JavaScript. It doesn't.
{{ data | json }}
will give you formatted json output of the data object (i.e. state/props) In reality you can put anything that's in the Vue object's scope between curly braces, pipe it through the json filter.>immutable list in Vue
<li class="for-example" v-repeat="item in list">{{item}}</li>So neither debugger support nor printf-debugging, you just have to hope you'll be dumping garbage in a place where it can be seen and doesn't break the page entirely?
> <li class="for-example" v-repeat="item in list">{{item}}</li>
Ignoring that vue changed the name of the directive a while ago[0] that doesn't even remotely work, according to its documentation v-for (née v-repeat) works on native arrays, it's not going to work in any sensible manner on immutable.js structures.
The bad thing about most other template DSLs is that they recreate all of these features from scratch, often in buggy ways. For example, many template DSLs have dynamically scoped variables instead of lexically scoped ones.
JSX:
<div className="classy" onClick={this.handleClick} />
No JSX: React.createElement('div', {
className: 'classy',
onClick: this.handleClick,
});
Native (note this naive implementation lacks proper scoping): var el = document.createElement('div');
el.className = 'classy';
el.onclick = handleClick;
This has been available on all major browsers for quite some time, React just provides some convenience around it and a sugar for those that prefer code that looks like HTML because people tend to (fairly, imo) associate their HTML with the state of the DOM.