But really, if you just want to get things done without arguing about the twenty different ways it _could_ work, then Vue.
React and ecosystem are overflowing with conflicting paradigms and mismatched libraries and frameworks for your frameworks that all make it very messy. In code, and with humans too, it all becomes difficult to navigate.
With Vue, you just do it the Vue way and it all just works. Then you get to focus on more important things like how to craft the product.
Vue sort of "just works" how you would expect it to work. You never really think about dependencies. Never really think about the render cycle. Rarely (maybe never) run into issues with over-render or performance. Vue 3 has been stable with only incremental improvements focused on DX. Big downside: tooling recently has had some instabilities.
State management and routing in Vue are top notch. Pinia is easy to use, works as you expect (rarely catches you off guard), and feels very ergonomic with Vue 3 composition API.
Vue SFCs are much nicer to work with than React and CSS modules -- or worse, CSS in JS (blech!).
Vue's `defineModel`, IMO, is a game changer for managing hierarchical state and simplifies and encourages refactoring[0].
Any project I work on myself, I use Vue.
React is a must have in your toolbox and experience because it has become the "enterprise" choice. Walmart.com, Target.com, tons of other retail websites are React. Amazon.com has React sprinkled in. Microsoft is big on React. Every team that's I've been on that's used it has done it poorly and had issues. Every team ended up with multiple state management paradigms because none of them were "just right". Every team had issues with troubleshooting over-renders and side effects. React is easy at the low end, but very, very challenging to do well at scale which is why I think it's fine in an enterprise context when you have teams enforcing rules, styles, and architecture. It's terrible for small teams moving fast because there's no "standard" React (whereas Vue has coalesced around Vue Router and Pinia, for example).
Of this list, I'd choose React. It's the most supported, has a lot of well-maintained components, and I've found it the easiest to hire for.
If you're interested in another option, I really recommend looking into Solid.js. It's not as mature or component-rich, but it does a great job of solving some issues with React. The biggest benefit to me is the "signals" system. It allows you to use state between components without having to use a Redux pattern or pass layer after layer of props. I also love that it's compiled, which keeps the end product small and quick, but also can help find some issues before runtime.
I'm not sure why so many comments are claiming this when it's verifiably wrong (github releases).
Angular has a shorter release cycle than React, with much more frequent updates overall.
Now some will argue that this is a bad thing because they don't want things to change too often, and they are right, but Angular has a much more stable core than React, and major changes to the developer experience are much rarer than on React despite this faster release cycle.
> I've found it the easiest to hire for
It has the Python syndrome. It was deemed the easiest at some point, so new programmers gravitate towards it, so it becomes more adopted. But it also has the same negative aspect that this brings to Python, which is a lot of very poor code and poor coders.
I don't doubt that it's easier to hire for, but I'm fairly certain it's not easier to hire WELL for.
I have made projects in Angular 1, Vue, React, and Svelte. I would start a new project using React because it’s the most popular, it has the most well maintained libraries, LLMs know it better, and the other frameworks aren't much different.
LLMs know it better? LLMs are hardly a way to get good programming advice. In fact, it is often wrong but not in obvious ways. Especially with React and state management, there are a lot of working wrong ways to do things.
I find current LLMs to be pretty good at giving programming advices. I agree that React and state management triggers a lot of thoughts. But if it’s working, is it wrong?
Vue is great too. I decided to use Vue at my previous job and I think the devs are still happy with it. I am more sure they implement new features with vuex though.
But when it’s time to take a decision, I personally go with React these days.
Vanilla Web Components (probably with Lit.dev). They've come a long way in the past decade, and if you decide to go full framework later you can bring your components with you.
Svelte. It's the only front end framework that "clicks" with me and I find I can build MVP/prototypes and simple apps much faster than in other frameworks.
I can't comment on the benefits at scale that another poster cites, but I've been working on an Angular project in a small team for four years now. This was quite close to a greenfield project, only a very small amount of code had been written, but we decided to keep it and stick to Angular even though two out of three of us had more experience with React. I had done both React and AngularJS and went in thinking that there wasn't much of a difference between frameworks.
I would not pick Angular again for a new project under any circumstances.
We have had many problems with the build system (e.g., an update suddenly bumped build times to several minutes due to some configuration option), the build process is ridiculously heavy, our laptops with 16GB RAM struggle with it often.
And we have had countless bugs related to component initialization and statefulness that I am certain would not exist in React. Our code is littered with early returns and ?.s that exist only because things are undefined for a split second before all the state comes in. We use a lot of RxJs, but it's quite often like coding in two separate environments and you need to write a bunch of boiler plate to bridge the observables to the inputs. There's no way in hell we're ever going to be able to move all the old code over to strict null checking, so we're missing out on a lot of the benefits of Typescript.
I don't agree with Angular's decision to have component classes that get newed once and then kept around for a long time and manually updated. It's much less ergonomic than React's way of doing things, and the statefulness leads to real bugs. The untyped templating language is just... bad. Quite often typos and bugs lead to JS errors being spammed to the console at ~60Hz, which used to freeze my browser (though I think Firefox has fixed this by now).
And I haven't seen a single benefit of this! My co-worker (who picked Angular and has previous experience with it) cites performance, but honestly the only performance related comment I have with is that my high-end Thinkpad has trouble keeping up with the build system.
Are we using it wrong? Probably. But we're not being clever. We started from simple examples and moved from there. I read documentation and tutorials, and I still feel like there's so much I don't understand. After four years.
Are you trying to find a new role or build something for yourself?
Is an SPA actually required? You might be able to build what you need using tools that involve less mental and technical overhead. Take a look at htmx, UnPoly, Rails/Hotwire, Phoenix LiveView, and/or Laravel LiveWire. Or maybe even good old-fashioned server-rendered HTML if you don’t need to build something that’s highly interactive.
I think it usually comes down to Angular vs React for most legitimate decisions for longer term, maintained projects. I prefer Angular because all the major modules are built-in and you know what to expect when you open a new project. React reminds me of PHP sometimes because you never know what you're walking into. And two different React projects can look drastically different.
Unfair comparison. You should compare Angular with Nextjs and Nuxt. I'd throw in a few more options I think are worth considering, Astro, Qwik and SolidStart. My preference in order is:
Astro - Great DX, interop with any other framework, ship HTML by default.
SvelteKit - This one is my favourite to use. Avoids JSX, full stack, great DX. I think this one is similar to Vue/Nuxt, more a matter of taste than actual difference.
React/Nextjs - largest community, most number of jobs, courses, trainings.
SolidStart - Solid is just Web components underneath. It's the most vanilla of the list. It's a great alternative for smaller projects where you want to reduce the amount of 'magic'.
Angular - Google support and not much else. I wouldn't start a new Angular codebase in 2024, but if I had one I'd be happy to work on it and keep it up to date. The framework is mature and new features are still being added.
Lit - I'm adding this one as a bonus. If your main goal is to ship a component library I'd look into this one.
Angular is much more mature and stable. React deprecates half of their (major) features and changes the way to do (basic) things with every new version.
I have used both professionally at the FAANG I work at and React is simply not a viable choice for a long-term project.
If you had learned Angular on the version 2 and now picked up a project with the latest version (18), 95% of the features would work exactly as you remembered.
React went from advising to declare components as functions, to declaring them as classes, back to functions (and will probably go back to classes in a few versions given their track record). 90% of the resources you will find online will give you code that is either deprecated or doesn't follow the current recommendation.
I'm no web developer but I know that my company completed a migration to Vue a few years ago. When I've seen this conversation in my travels the answers are usually, React for Ecosystem/Legacy, Vue for new projects. But again I'm no web dev
For my new project I wanted to try something new but I ended up going with React again. At the end it was the right decision for me because of the libraries I ended up using. The community/ecosystem is just unparalleled. Whatever library you need there’s a big chance someone has built it for React. If you’re learning a new concept or tutorial there’s almost always a section about implementing it in, or the examples are in react.
I really like how Vue lays things out; very clean and comprehensible. The official docs are pretty great, and there's generally one obvious forward path.
But if you're doing anything weird there's a lot more out in the world for React. Even though it's kind of a big mess, quantity has a quality all its own.
I would personally use React out of the 3 as it's the best maintained, although it depends on the complexity of the project and whether something lighter could be better.
I'd never heard of Nativescript, but have tinkered with React for the React Native functionality, so maybe Nativescript is something I should look into. Is it pretty mature as far as feature parity with React Native?
But really, if you just want to get things done without arguing about the twenty different ways it _could_ work, then Vue.
React and ecosystem are overflowing with conflicting paradigms and mismatched libraries and frameworks for your frameworks that all make it very messy. In code, and with humans too, it all becomes difficult to navigate.
With Vue, you just do it the Vue way and it all just works. Then you get to focus on more important things like how to craft the product.