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).
[0] https://chrlschn.dev/blog/2024/01/a-conceptual-model-of-stat...
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.
Svelte is nice but I like react/mobx more.
But when it’s time to take a decision, I personally go with React these days.
Well, you'll find out later when it gives a headache. Technical debt are things that work, but are wrong.
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.
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.
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.
HTMX - skip this, it's just a meme
Rare to see this take, everyone claims it's incredible. Can you share more about why?
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.
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.