I don’t think you are looking at it objectively. The only “proprietary” part is the template DSL, which is in fact directly translatable into JavaScript counterparts. I would also argue the cognitive overhead of Vue’s template DSL is NOT that much more than what JSX introduces on top of plain JavaScript:
- v-if, v-for: ternaries & map(). And I’d argue in a lot of cases it’s more succinct and pleasant than the JS counterparts. This can be subjective though.
- Event handlers: onClick={()=>method()} vs. @click=”method”. In JSX you also need to worry about the handler `this` binding, handle event propagation and check keyCodes yourself, whereas in Vue thanks to the DSL there are handy modifiers: @keyup.enter.prevent=”onSubmit”.
- Class bindings: className={…} vs :class=”…”. Notably, in most cases you will have to use a classname utility which ends up having its own API (and Jed Watson’s classnames has almost exactly the same interface v-bind:class does).
- Style bindings: almost exactly the same, you can use an object for :style=”{ … }”. So you can do pure inline styles in JavaScript with Vue if that’s your cup of tea.
- React also has “proprietary” concepts like special ref and key props. Plus you have to remember all the camelCase prop counterparts for standard HTML attributes.
I’ve seen countless developers being able to pick up Vue’s template syntax in a matter of hours. It turns you off simply because you are accustomed to a different mental model and is reluctant to switch.
So, conversely I can say: Vue’s template is just JavaScript in HTML. And with Vue’s single file components, CSS is just CSS (with the ability to leverage LESS, SASS, or PostCSS + CSSNext so you can write the CSS of tomorrow today). Vue embraces HTML and CSS, which are open standards instead of JavaScript extensions or CSS-in-JS solutions pushed mainly by a for-profit company.
Under the hood, templates are simply a DSL that serves the same purpose: mapping state to UI. It just prioritizes the readability of the UI’s visual and semantic structure instead of logic.
The “simplicity” of everything is JS is also partially deceiving due to how bare bone it is: you end up with much more boilerplate and utilities in order to fill in the gaps. But you justify that by convincing yourself that “the core idea is simple”.
“Just look how many production sites are created with angular vs react.” I’m not finding that one self-evident unless you can show some real statistics — and you may very well be surprised when you step out of the echoing chamber.
“It is pretty easy for beginner to decide which new technology to try” is, no offense, quite shortsighted. Most beginners try React because of the hype and because of the Facebook brand name behind it. I doubt the percentage that genuinely “get it” or liked it on the first try. You think React is simpler only because it happens to fit your mental model better (and for others who dissent HTML/CSS for whatever reason), but that’s not necessarily true for everyone. It’s delusional to assume that one programming model can fit all developers, and I think the popularity of Vue despite no corporate backing is an evidence for that.
Oh and finally, the ability to directly use render functions already addresses what you are asking for ;)