React
React stormed the JS world several years ago to become its definite leader. React encourages you to use a reactive approach and a functional programming paradigm. React also introduced many of its own concepts to define its unique (at the time it was created) approach to frontend web development. To use React, you’ll have to master a component-based architecture, JSX, and unidirectional data flow. The unidirectional data flow is implemented by Flux.
React-based applications are divided into multiple components. A single component file contains both business logic and HTML markup (which is actually a JSX markup that’s transformed into JavaScript functions). For communication between components, you can use either Flux or a similar JS library. React also introduced special objects – state and props. Using the state and props objects, you can simply pass data from a component to the layout (using the state object) or from a parent component to a child component (using the props object).
React prompted the development of a plethora of additional tools to reach high flexibility. For example, instead of Flux, you can opt for MobX, Redux, Fluxy, Fluxible, or RefluxJS. And this list of state management libraries for React is far from exhaustive. The same goes for HTTP libraries: React is able to work with jQuery AJAX, fetch API, Superagent, and Axios, to name a few.
Even though flexibility is its main advantage, React nevertheless has issues because of its flexibility. When you have to choose from many additional libraries, you face the dilemma of what exactly you should use with React. You may waste much time trying to figure out the best options. Basically, there’s still no solid development workflow with React.
React tries to set industry standards. For instance, Redux is considered the best and only library for enterprise-level React apps. At the same time, you need to think of the following: Redux can seriously slow down development performance. Redux make your work difficult when you implement a new feature and have to change too many things throughout the entire app. So we’re back to the same dilemma: should I choose a simpler library?
You’ll have to build your own workflow with React. It’s a more difficult road than just using what other JS frameworks give you: plenty of ready tools that are built into the framework.
The React ecosystem is comprised of:
- The React library itself plus React-DOM for DOM manipulation.
- React-router for implementing routes.
- JSX, a special markup language that mixes HTML into JavaScript.
- React Create App, a command line interface that allows you to rapidly set up a React project.
- Axios and Redux-based libraries, JS libraries that let you organize communication with the backend.
- React Developer Tools for Chrome and Firefox browsers.
- React Native for development of native mobile applications for iOS and Android.

The bottom line: React is one of the most used JavaScript frameworks. Although we acknowledge the huge hype around React, we genuinely think that React can be your first choice for creating an advanced user interface. Don’t be afraid to choose from plenty of React tools.
Angular 2 and Higher
Angular 2+ marks a turning point in the history of the Angular framework. Starting as a solid Backbone competitor, AngularJS (read: Angular 1.x versions) nearly became obsolete when React came out. (Angular 1.x versions are still in demand, however, as many current projects rely on it and the shift to Angular 2+ will take several years.) Angular has substantially changed its architecture to come to terms with React. So what does Angular offer now?
One notable change in Angular is from a Model-View-Whatever (read: some form of MVC) architecture to a component-based architecture. Angular has become very modular. If previously you could insert a link to the AngularJS library in the main HTML file, now you can install separate modules. You can easily shy away from installing some Angular modules, for example @angular/forms or @angular/http, if you don’t need them. This Angular flexibility is commendable.

When you build an application with Angular, you break your app up into multiple components with nested, or child, components. Each Angular component is broken into three files. The business logic for a component is written in the main file, whereas the layout and styles related to this component are written in the other two files.
Apart from Angular components, you have to get used to services, the dependency injection framework (React doesn’t have dependency injection), and directives (special HTML attributes). In the simplest terms, Angular wants you to design frontend apps in a prescribed way, unlike React.
Angular has a couple of additional challenges. We’re almost obliged to use TypeScript to ensure type safety in Angular apps. TypeScript makes the Angular 2+ framework not so pleasant to work with. And if you’ve used Angular 1.x before, you’ll have to learn Angular 2+ from the beginning, because it’s kept little from previous versions.
Angular’s ecosystem includes:
- A series of modules that you can selectively install for Angular projects: @angular/common, @angular/compiler, @angular/core, @angular/forms, @angular/http, @angular/platform-browser, @angular/platform-browser-dynamic, @angular/router, and @angular/upgrade.
- TypeScript and CoffeeScript, supersets of JavaScript that can be used with Angular.
- Angular command line interface for quick project setup.
- Zone.js, a JS library used to implement zones, otherwise called execution context, in Angular apps.
- RxJS and the Observable pattern for asynchronous communication with server-side apps.
- Angular Augury, a special Chrome extension used for debugging Angular apps.
- Angular Universal, a project aimed at creating server-side apps with Angular.
- NativeScript, a mobile framework for developing native mobile applications for iOS and Android platforms.
The bottom line: Comparing Angular2+ with React is questionable as Angular is a complete framework with all the tools a modern JavaScript developer needs. Angular 2+ hasn’t yet reached the popularity level of its little brother, but it will get more support from Google in the near future. Choose Angular if you don’t like to constantly choose among additional libraries as with React.
Vue
At first sight, you might say that the Vue library is just a mix of Angular and React. In fact, Evan You, creator of Vue, borrowed concepts from Angular and React. For example, Vue wants you to store component logic and layouts along with stylesheets in one file. That’s how React works without stylesheets. To let Vue components talk to each other, Vue uses the props and state objects. This approach also existed in React before Vue adopted it.
Similarly to Angular, Vue wants you to mix HTML layouts with JavaScript. You have to use Vue directives such as v-bind or v-if to interpolate values from the component logic to templates.
For any developer unfamiliar with Vue, React, and Angular, it’ll be even more difficult to choose a framework after what we’ve just told you, so let’s clarify several points.
One of the reasons why Vue is worth considering instead of React is because of the Redux library that’s often used in large-scale React applications. As explained in the React section, when a React+Redux app grows bigger, you’ll spend a lot of time applying small changes to multiple files instead of actually working on features. The Vuex library – a Flux-like state management tool designed for Vue – seems less unwieldy than Redux.
As for the choice between Vue and Angular, the reasons to opt for Vue over Angular can be reduced to the following: Angular is an over-complicated, full-fledged framework with a restrictive nature; Vue is much simpler and less restrictive than Angular.
What’s also praiseworthy about Vue in comparison to Angular and React is that you don’t have to learn JavaScript once more. Vue doesn’t force you to learn another superset of JavaScript like TypeScript (for Angular) or JSX (for React). As a result, the learning curve is less steep with Vue than it is with Angular and React.
One of the downsides of Vue is that it’s still much less popular than either React or Angular. As a result, Vue has far fewer ready solutions, so you may have to think about creating your own solutions to solve various issues.
The VueJS ecosystem consists of:
- Vue as a view library.
- Vue-loader for components.
- Vuex, a dedicated library for managing application state with Vue; Vuex is close in concept to Flux.
- Vue.js devtools for Chrome and Firefox.
- Axios and vue-resource for communication between Vue and the backend.
- Nuxt.js, a project tailored to creating server-side applications with Vue; Nuxt.js is basically a competitor to Angular Universal.
- Weex, a JS library that supports Vue syntax and is used for mobile development.
The bottom line: Vue is extremely close in terms of its workflow to other frameworks. But should we pay attention to a new technology just because it’s there? We might opt for Vue because it’s less complicated than React and Angular 2+. On the other hand, we also believe that having a solid framework (Angular) or a solid choice of libraries (React and its ecosystem) outweighs simplicity by a huge margin when developing enterprise-level apps.
Leave a comment