Angular, React and Vue are all JavaScript-based systems for creating interactive webpages (SPA = Single page applications). By interactive, we mean a page that “reacts” to what the user does.
In other words, what should happen when a user clicks a button or any other thing on a webpage?
I believe a short background on why Angular, React and Vue came to be, is crucial in understanding what purpose they solve. Before these 3 big frameworks, there was a javascript-based library called jQuery that helped developers code less, and faster with a set of standardized functions. I personally liked jQuery as it offered an easy way to make a webpage interactive at the time.
But there were some caveats :
But nowadays, jQuery isn't really an option, so moving on!
To mitigate these caveats, several companies set out to solve these issues, Google created Angular, Facebook created React, and a guy named Evan You that worked on AngularJS created Vue!
These frameworks/libraries all focus on delivering scalable web applications that are highly customizable and reactive (hence why React is called React).
Angular is the oldest JavaScript framework of the “3 big ones” and has traditionally been selected by customers that want something that is “enterprise-grade”, where all you need is one solution. Angular is owned by Google and by that extension gets updates from its employees. Angular has a steeper learning curve than React and more “boilerplate” code, but when a developer is up and running with Angular there should not be much of a speed penalty in regard to productivity.
React is a JavaScript library created by Facebook, to handle all the actions a user can do on their page, it has grown a lot since its inception and is now the most used SPA (single-page application) in the world, with 15 million weekly downloads. React is fast/small in size and comes in many flavours with a multitude of implementations so it can run basically everywhere.
In comparison to Angular, React is more community-driven, resulting in external dependencies and is therefore a more barebones solution compared to Angular.
To drive my point about external libraries: There was a guy named Marak that created a JS package that had 1,5 million weekly downloads. He decided to “delete” the package and as a result, a multitude of projects ended up having issues due to the missing dependency. But that does not happen every day and could also happen in a Vue or Angular project. This is something to take into consideration as it can happen, but don't worry too much, there are ways to fix and protect against this.
Vue is a framework created by Evan You, a developer that worked on AnguarJS, he took what he liked from AngularJS and create Vue.
Vue fits in between Angular and React, as it's easier to learn than Angular, but it's still not at easy as React. You would get all the benefits of Vue being a framework meaning it comes bundled with all your needs and uses many of the same concepts from Angular.
Vue is not as widely adopted as all the other front-end libraries out there but is highly loved by its community of developers, especially after Vue released the composition API, making it more like React.
Angular, React, and Vue are all capable of serving as development frameworks for Progressive Web Apps (PWAs).
PWAs are not conventional mobile applications; instead, they are web applications that smartphone users can conveniently add as shortcuts to their home screens. These PWAs provide a user experience that closely resembles that of native mobile apps.
Moreover, for each of these frameworks, you can discover premium templates and pre-built applications.
You would not go wrong with any of the aforementioned technologies, all of them have their own strong points and are all viable options. There are many more libraries/frameworks out there to choose from, but choosing one of these carries a greater risk as well.
Take a look at: Google has an interesting graph of the most searched frontend terms over time, also broken down by geographic region.
In summary, here is my list of what to consider when choosing which framework to invest in for a major project: