Vue.js is a step backwards, relative to React, in my opinion. What I love about React is JSX (or TSX if using TypeScript). JSX is a combination of JavaScript and HTML syntaxes. You don't need to learn a new syntax in order to incorporate loops and conditionals in the view layer, thanks to JSX: you just use JavaScript. More importantly, you get compile-time verification. If you use a JavaScript variable in JSX and someone deletes that variable you find out about this issue at compile time. This is very important for large projects that multiple developers are working on together. Angular and View.js don't have this capability and that's a very serious shortcoming for large projects.
Styling React components is a huge pain. What I like about Vue is the awesome styles, HTML and js in one file for each component. With React projects I have a completely seperate styles folder.
It's hard to take anyone seriously who doesn't even spell the name of the thing they're opining on correctly. I'd venture to say you've never used Vue in a meaningful way so probably aren't qualified to make a comparison.
> More importantly, you get compile-time verification. If you use a JavaScript variable in JSX and someone deletes that variable you find out about this issue at compile time. This is very important for large projects that multiple developers are working on together.
I'm still amazed people argue that statically typed languages don't make you more productive compared to dynamically typed languages.
Jade/Pug templates (been around for years, and are the ExpressJS default) also offer the same feature of being just "a combination of JavaScript and HTML elements". I haven't been convinced yet that JSX is better, because I can do all the same things in Pug (client or server-side rendering, compile to Hyperscript, compile to Javascript) yet with cleaner syntax.
Funny to read this--talk about the benefits of strong-typing, etc. The dynamic nature of JS was once a benefit. Granted, it wasn't initially purposed for full-out browser facing SPAs, etc.
Still, strong-typing has been with us forever and, in general, I feel like we've solved this problem. I'd like to see a light-weight VM framework that supports Java code compiled down to JS, with an in-browser Swing-like component framework (no, not applets). But a lot of the tenents of async, event-driven Swing style dev (including using workers to keep i/o off the event thread), actually overlay nicely with the challenges that modern JS frameworks are attempting to solve.
I know there's not a lot of Java-love around here, but, pick any language that has modeled out this problem and has a cadre of seasoned developers. Then, rather than re-invent the wheel, just port that to the browser.
FWIW, Angular templates are also checked at compile time. (But you're not wrong about the advantages of JSX -- as you observe Angular has its own syntax for looping etc.)
After being burned really badly by Ember and Meteor, I'm probably never going to use tools that are all-in-ones ever again.
With React I get something laser-focused, just does 1 thing well and that's it. With Vue, I have to buy into the entire ecosystem.
I don't want to experience what I did with ember and meteor ever again in my professional life. I think about all the great developers I've worked with and I looked up to, and almost all of them hated all-in-ones. I rolled my eyes when I was younger, but today it's like damn these guys had a point!
I really don't think Vue is an all-in-one. It handles the UI side and the binding and rendering, but is otherwise the least opinionated of any framework I've seen with regard to how you structure and write the rest of your JS. It's much more like the Backbone and Underscore days, except even less opinionated and boilerplate-heavy.
Vue is the antithesis of Angular 1 in that sense. No stupid ontology of inane design patterns - no services, no providers, no factories, none of that mandatory crapola.
Vue isn't even close to all in one, and in fact markets itself as the "progressive framework for building user interfaces":
"Unlike other monolithic frameworks, Vue is designed from the ground up to be incrementally adoptable. The core library is focused on the view layer only, and is very easy to pick up and integrate with other libraries or existing projects."
I agree with the general notion, but I fail to see how one would consider Vue an all-in-one, its feature scope and actual size in KB are much closer to small, view focused frameworks such as React.
While react is perfectly capable of being mixed freely with vanilla js, you'll likely find that once you start down the react path and build up a library of components, it starts to make sense to do your project 100% in react.
> With Vue, I have to buy into the entire ecosystem.
Vue is really just a component framework that deals with the view, it doesn't do Ajax, it doesn't even do routing and don't force a backend or a database like Meteor.
I understand where you're coming from. However, Vue isn't an "all-in-one" or "batteries included" library. Vue is just a view layer. It fills the same layer of the stack that React does.
I think there's merit on staying small-ish. Not every framework has to be a giant that dominates the industry.
Having a small community means the potential for focus and strong canonical learning resources, as opposed to the mess of poorly written React and Angular posts/"guides" we get every week. The community feels tighter and it may be easier for the maintainer(s) to manage it and the codebase.
Ember is a good example. Ember's community isn't small (sold out conferences every year), but it's not in the spotlight like React or Angular are. That doesn't mean the framework is doing poorly. If anything, their community and meetups are "better" than React's (for my definitions of a good community/meetup).
Having used all three, it feels like Vue.js will grow to occupy the role that React occupies today. That, or React will (smartly) take on some of Vue's core features like single component files with actual HTML, CSS, and JavaScript in them. Vue is far easier to start with yet feels more powerful too. Angular 2+ is a separate animal for larger teams, so will probably remain for that use case.
React components can have markup, styles and logic in one file. Seems like the only thing Vue brings to the table in this respect is yet another templating pseudolang.
it always amazes me how one person project such as vuejs and laravel can compete against with the frameworks made by giants such as google and facebook. yes there are more developers involved in vuejs and laravel now but the two main authors are still the king to rule these two extremely popular projects, truly amazing.
It's a bit disingenuous to say that Facebook uses Vue for Newsfeed. It's on a marketing site, not on a performance and business critical part of the site.
These marketing sites are very often built by contractors, not FB engineers, and tend to be one off efforts.
Not to knock Vue, but it weakens the message when deliberately misleading info like this is used
Nope. React has 10 people in its core team, highly compensated to work on React. There is at least one genius among those 10. Think of Fiber and how it works. VueJS may copy that model but in this sense, as in the case with JSX, they're a follower. They are not a thought leader. Just a sink/collector for React haters.
Maybe you should share your opinion with Even You at the next conference you go to and see how he takes it. Writing Vue off like this is an insult to it's creator. Evan works really hard on maintaining and improving Vue for what probably amounts to pennies on the dollar when compared with the money Facebook pumps into react.
I'm not saying that you're wrong about Vue not being a "thought-leader" or whatever, just that you really should be more appreciative of developers who release awesome libraries under OSS licensing.
That said, being a "thought-leader" is not necessary in order to make a difference. Software has been, is, and always will be an iterative process. We build upon the shoulders of giants that came before us. We take the best ideas from our predecessors and combine them to create something new and, hopefully, better. Regardless of your opinion on the philosophical aspects of Vue, you have to give credit to its creator and its community.
> Think of Fiber and how it works. VueJS may copy that model but in this sense, as in the case with JSX, they're a follower. They are not a thought leader.
Fibers only exist because sharing between Javascript threads is not currently an option.
React is a thing only because Javascript sent us back 20 years in time.
Yes, I will agree with you, someone who's never created anything of worth nor ever will. And I know this because you have so little agency you had to use a throwaway account to write this.
I went Angular, because I can get a well paid job very easily, it's a very fun Framework to work with, TypeScript is awesome, it's complete, fast and powerful, is backed by Google and has a huge community.
Vue might be fun to work with, but it doesn't have all the advantages of Angular (or React) I listed above.
Everything has already been said in the article, but there's one thing that makes Vue stand out the most: The author(s) are really focused on keeping this framework's API simple and getting rid of/deprecating stuff that doesn't promote productivity.
Tried Angular, ReactJS and VueJS and to me, they have their own strengths, but all are more than capable as frameworks for building large and solid enterprise level apps. IMO, productivity and simplicity has Vue winning my preference.
Reading the article, I was surprised at this part:
"Wait, did I just write Facebook? Check Facebook’s newsfeed."
I did checked facebook's newsfeed and certainly, the Vue Devtools lit up on my Chrome browser, which detected VueJS being used on that page. Given that FB has heavily leaned on React, I wonder why they would be using Vue on one of their premiere pages? Is it because they are also trying to analyze what's being offered by Vue and integrate it with React in the future?
for what it's worth I will say that writing components in Vue is enjoyable in the way that React was initially. the two are definitely more similar than either is to Angular, but I find Vue slightly more easy to get started with (no JSX overhead). JSX is far more powerful than simple HTML templates but I rarely find myself needing that power.
Facebook news feed always crashing after sometimes of scrolling on mobile devices. The whole version of mobile web Facebook looks terrible, old fashion, completely awful ui\ux. This is a result of working framework. Try to compare it with another social networks like VK.com which is extrimely stable on mobile devices (both desktop and mobile version), very fast and user friendly.
While I don't mind if Vue stays small (as in, just used enough to keep momentum), I'd love it if it became more popular. It's truly a joy to work with.
Angular was the first framework I used, and I liked working with it well enough, even if I wasn't a big fan of many of its idiosyncrasies. But then Google announced they were going in an entirely different direction so I decided to try new things.
I tried liking react (gods, I tried, many, many times) but I just can't like how the code looks when using it or the structure it ends up forming, or the boilerplate it requires.
Vue, however, feels like doing plain JS, which I actually like[1], as each component is rarely more than a few objects and functions. Well, that and html templates, which I'm fine with and would have to use anyway as a backend developer.
[1]: JS has always been my second favorite language, after python, and the new versions are just so nice to write.
This is a valuable discussion to me right now. At work I've been tasked with looking into a number of front end frameworks (Angular 4, React, Vue, Aurelia and Mithril) to see if we'd like to start writing new pages and components in one of those as opposed to AngularJS which we currently use. AngularJS has a few specific pain points for our web app, a complex and (unfortunately) ambitious SPA.
I'm building a prototype of one of our actual landing pages in each framework to get a bird's-eye view of what works and what doesn't. So far I've been really impressed with Vue, but my team has a couple of objections from the outset:
1) Most mid-level developers haven't heard of or used Vue, so the pool of candidates we can hire as our company grows will be smaller if we switch from a common denominator like AngularJS to something relatively unknown like Vue. I personally love to learn new tech, but not everyone does and a "Vue developer" job posting may not get a lot of hits.
Then again, if (e.g.) 15% of devs want to use Vue and only 10% of companies use it, that's a clear advantage over 75% of devs wanting to use Angular and 80% of companies using it. I wouldn't be surprised if the numbers worked out like that.
2) Vue is kind of a one-man band, whereas Angular and React are backed by large cap companies. This is the weaker argument IMO, since there's no law stating that Google and Facebook can't run up on hard times and decide to drop support for their open source projects. And after seeing how sloppy Angular's documentation is, I've lost a lot of confidence in the "bigger is better" argument. However, in a rational universe, it may be fair to say that Vue would die more easily than Angular would.
My view on the situation is that it's better to use the right tool for the job and have less developers/support than to use the wrong tool for the job and have more developers/support. But I'm more technically-minded than business-minded, so I understand that I might need to be open to business concerns outside of my normal decision-making criteria.
I'm keeping detailed notes as I compare frameworks, so I may do a write-up when I'm done if anyone's interested. (Although the "battle of the frameworks" genre has been done to death...)
I am a fan of this "small (and focused) is beautiful" approach, like yo-yo [0], hyperHTML [1], and numerous others.
The thing that sold me on Preact is its compatibility layer with React, which provides a kind of de facto standard API for components. One day I just replaced React with Preact, with the only difference being a happily reduced app size -
and have been using it since. I don't plan to keep up with React's latest developments - I'm satisfied with the rendering performance of Preact, and want to stick to a stable API which lets me focus on actually building things with it.
I feel the same about client-side routers, the build process with Webpack, etc. - I'm fatigued of keeping up with breaking changes, and have started transitioning to smaller, individual libraries that just do their modular jobs, with minimum API surfaces that are reliable over long-term.
The only advantage React has is a huge backer..Facebook.
So large companies are more open to using it because it's less risk and has higher chance of being around in 5 years than a framework without a huge backer.
That's my theory on how 'biz' people make I.T. decisions.
I've not used Vue or Angular, but I love React. It feels almost object oriented programming like - kind of like programming in Java. Correct me if I'm wrong (I'm new to web dev).
[+] [-] petilon|8 years ago|reply
[+] [-] indreklasn|8 years ago|reply
Styling React components is a huge pain. What I like about Vue is the awesome styles, HTML and js in one file for each component. With React projects I have a completely seperate styles folder.
[+] [-] tyrw|8 years ago|reply
[+] [-] seanwilson|8 years ago|reply
I'm still amazed people argue that statically typed languages don't make you more productive compared to dynamically typed languages.
[+] [-] amelius|8 years ago|reply
[+] [-] doublerebel|8 years ago|reply
[+] [-] unknown|8 years ago|reply
[deleted]
[+] [-] unclebucknasty|8 years ago|reply
Still, strong-typing has been with us forever and, in general, I feel like we've solved this problem. I'd like to see a light-weight VM framework that supports Java code compiled down to JS, with an in-browser Swing-like component framework (no, not applets). But a lot of the tenents of async, event-driven Swing style dev (including using workers to keep i/o off the event thread), actually overlay nicely with the challenges that modern JS frameworks are attempting to solve.
I know there's not a lot of Java-love around here, but, pick any language that has modeled out this problem and has a cadre of seasoned developers. Then, rather than re-invent the wheel, just port that to the browser.
[+] [-] evmar|8 years ago|reply
[+] [-] jankiel|8 years ago|reply
[+] [-] rightnow|8 years ago|reply
[deleted]
[+] [-] sergiotapia|8 years ago|reply
With React I get something laser-focused, just does 1 thing well and that's it. With Vue, I have to buy into the entire ecosystem.
I don't want to experience what I did with ember and meteor ever again in my professional life. I think about all the great developers I've worked with and I looked up to, and almost all of them hated all-in-ones. I rolled my eyes when I was younger, but today it's like damn these guys had a point!
[+] [-] abalashov|8 years ago|reply
Vue is the antithesis of Angular 1 in that sense. No stupid ontology of inane design patterns - no services, no providers, no factories, none of that mandatory crapola.
[+] [-] yunyu|8 years ago|reply
"Unlike other monolithic frameworks, Vue is designed from the ground up to be incrementally adoptable. The core library is focused on the view layer only, and is very easy to pick up and integrate with other libraries or existing projects."
[+] [-] MatekCopatek|8 years ago|reply
[+] [-] patrick_haply|8 years ago|reply
[+] [-] tootie|8 years ago|reply
[+] [-] camus2|8 years ago|reply
Vue is really just a component framework that deals with the view, it doesn't do Ajax, it doesn't even do routing and don't force a backend or a database like Meteor.
[+] [-] bmh_ca|8 years ago|reply
Specific, narrow focus and it's served me well. Sensing the innate liability, I've never felt the allure of the full fledged framework.
[+] [-] scriptkiddy|8 years ago|reply
[+] [-] aarpmcgee|8 years ago|reply
[+] [-] ausjke|8 years ago|reply
[+] [-] SilverSlash|8 years ago|reply
[+] [-] rightnow|8 years ago|reply
[deleted]
[+] [-] sotojuan|8 years ago|reply
Having a small community means the potential for focus and strong canonical learning resources, as opposed to the mess of poorly written React and Angular posts/"guides" we get every week. The community feels tighter and it may be easier for the maintainer(s) to manage it and the codebase.
Ember is a good example. Ember's community isn't small (sold out conferences every year), but it's not in the spotlight like React or Angular are. That doesn't mean the framework is doing poorly. If anything, their community and meetups are "better" than React's (for my definitions of a good community/meetup).
[+] [-] tyrw|8 years ago|reply
[+] [-] woah|8 years ago|reply
[+] [-] ausjke|8 years ago|reply
[+] [-] shaneos|8 years ago|reply
These marketing sites are very often built by contractors, not FB engineers, and tend to be one off efforts.
Not to knock Vue, but it weakens the message when deliberately misleading info like this is used
[+] [-] nope123|8 years ago|reply
[+] [-] scriptkiddy|8 years ago|reply
I'm not saying that you're wrong about Vue not being a "thought-leader" or whatever, just that you really should be more appreciative of developers who release awesome libraries under OSS licensing.
That said, being a "thought-leader" is not necessary in order to make a difference. Software has been, is, and always will be an iterative process. We build upon the shoulders of giants that came before us. We take the best ideas from our predecessors and combine them to create something new and, hopefully, better. Regardless of your opinion on the philosophical aspects of Vue, you have to give credit to its creator and its community.
[+] [-] amelius|8 years ago|reply
Fibers only exist because sharing between Javascript threads is not currently an option.
React is a thing only because Javascript sent us back 20 years in time.
[+] [-] julianmarq|8 years ago|reply
[+] [-] ice109|8 years ago|reply
who?
[+] [-] k__|8 years ago|reply
[+] [-] azr79|8 years ago|reply
Vue might be fun to work with, but it doesn't have all the advantages of Angular (or React) I listed above.
[+] [-] Tade0|8 years ago|reply
[+] [-] AngeloAnolin|8 years ago|reply
Reading the article, I was surprised at this part:
"Wait, did I just write Facebook? Check Facebook’s newsfeed."
I did checked facebook's newsfeed and certainly, the Vue Devtools lit up on my Chrome browser, which detected VueJS being used on that page. Given that FB has heavily leaned on React, I wonder why they would be using Vue on one of their premiere pages? Is it because they are also trying to analyze what's being offered by Vue and integrate it with React in the future?
[+] [-] colbyh|8 years ago|reply
[+] [-] dqvsra|8 years ago|reply
[+] [-] enkay|8 years ago|reply
[+] [-] luord|8 years ago|reply
Angular was the first framework I used, and I liked working with it well enough, even if I wasn't a big fan of many of its idiosyncrasies. But then Google announced they were going in an entirely different direction so I decided to try new things.
I tried liking react (gods, I tried, many, many times) but I just can't like how the code looks when using it or the structure it ends up forming, or the boilerplate it requires.
Vue, however, feels like doing plain JS, which I actually like[1], as each component is rarely more than a few objects and functions. Well, that and html templates, which I'm fine with and would have to use anyway as a backend developer.
[1]: JS has always been my second favorite language, after python, and the new versions are just so nice to write.
[+] [-] isaaclyman|8 years ago|reply
I'm building a prototype of one of our actual landing pages in each framework to get a bird's-eye view of what works and what doesn't. So far I've been really impressed with Vue, but my team has a couple of objections from the outset:
1) Most mid-level developers haven't heard of or used Vue, so the pool of candidates we can hire as our company grows will be smaller if we switch from a common denominator like AngularJS to something relatively unknown like Vue. I personally love to learn new tech, but not everyone does and a "Vue developer" job posting may not get a lot of hits.
Then again, if (e.g.) 15% of devs want to use Vue and only 10% of companies use it, that's a clear advantage over 75% of devs wanting to use Angular and 80% of companies using it. I wouldn't be surprised if the numbers worked out like that.
2) Vue is kind of a one-man band, whereas Angular and React are backed by large cap companies. This is the weaker argument IMO, since there's no law stating that Google and Facebook can't run up on hard times and decide to drop support for their open source projects. And after seeing how sloppy Angular's documentation is, I've lost a lot of confidence in the "bigger is better" argument. However, in a rational universe, it may be fair to say that Vue would die more easily than Angular would.
My view on the situation is that it's better to use the right tool for the job and have less developers/support than to use the wrong tool for the job and have more developers/support. But I'm more technically-minded than business-minded, so I understand that I might need to be open to business concerns outside of my normal decision-making criteria.
I'm keeping detailed notes as I compare frameworks, so I may do a write-up when I'm done if anyone's interested. (Although the "battle of the frameworks" genre has been done to death...)
[+] [-] amelius|8 years ago|reply
[1] https://github.com/developit/preact
[+] [-] lioeters|8 years ago|reply
The thing that sold me on Preact is its compatibility layer with React, which provides a kind of de facto standard API for components. One day I just replaced React with Preact, with the only difference being a happily reduced app size - and have been using it since. I don't plan to keep up with React's latest developments - I'm satisfied with the rendering performance of Preact, and want to stick to a stable API which lets me focus on actually building things with it.
I feel the same about client-side routers, the build process with Webpack, etc. - I'm fatigued of keeping up with breaking changes, and have started transitioning to smaller, individual libraries that just do their modular jobs, with minimum API surfaces that are reliable over long-term.
[0] https://github.com/maxogden/yo-yo [1] https://github.com/WebReflection/hyperHTML
[+] [-] peter_retief|8 years ago|reply
[+] [-] nickthemagicman|8 years ago|reply
So large companies are more open to using it because it's less risk and has higher chance of being around in 5 years than a framework without a huge backer.
That's my theory on how 'biz' people make I.T. decisions.
[+] [-] SilverSlash|8 years ago|reply
[+] [-] davedx|8 years ago|reply
[+] [-] mstijak|8 years ago|reply
Preact offers a similar experience.