Recently I have seen a lot of articles comparing this two popular Front-End library. Which makes more sense than “Angular vs React” because Angular tries achieve a different goal compared to React or Vue. But is it really a debate? I do not think it is about which one is better. It all comes down your or your team’s background and preference. Let’s take some typical comparisons on the internet and explore them.

Simple App/Style Comparison

Please, stop this. Stop showing the difference between two simple hello world app and try to justify one is better than another. If you are writing even a medium scale application, chances are you will be using ES6 Syntaxes, along with state manager and routing libraries. At this point, your app is already complex and that hello world comparison will not matter at all.

Each developer prefers different types of coding style and it depends a lot on their background. If a developer is really comfortable with functional programming and Javascript, chances are they will prefer React. On the other hand, if someone has been writing a lot of templates before and loves to write them, they will prefer Vue.

State Mutation

Vue prefers to mutate state directly, while react prefers immutable state. What you like is up to you. Pros of mutating state directly are less code, easier to manipulate state using simple syntaxes. At the same time, mutating state directly can be make debugging difficult.

But again, for a medium or large scale app, chances are you will be using a state manager like Redux, Vuex or MobX. Vue uses Vuex as their primary state manager, but you can use Redux with Vue as well. At the same time, Redux is primarily used with React, but you can use MobX with React which is very similar to Vuex.

Truely Separated Components

What is a component? A component is defined differently in React and Vue. In React, you will have a Javascript class, with its own JSX component. As React is all about Javascript programming, their style has to be defined in JSON. In this way, you have your components logic, style and definition in one single file. In Vue, you write your templates, script and style in a file to define a single separated component, just like you would do in a single HTML file.

I think the difference between their coding style becomes much more clear in here. You can clearly see a front end web developer will find Vue much easier to work with. While a full stack or back end Javascript developer working on the front end might find React much easier.

Large Scale Application

I have seen a lot of people saying it is not possible to write large scale app in Vue. This is absolutely wrong in my opinion. After writing a medium scale single page app in Vue, I think it will scale absolutely fine in future. Once you have your router and state manager integrated into your app and as long as you are writing separated single component, I do not see what would stop you from writing a large app in Vue. React is built for large scale app you would not have any problem there as well. Both of these libraries are great for building large scale applications.

Mobile, Desktop and Web Applications

You can write a mobile application in both React and Vue. Although React might have a little bit advantages here, as React Native (React’s mobile app development framework) is developed internally by Facebook themselves. With Electron, you can write a desktop application using both React and Vue, as Electron just wraps the web application in a custom chrome browser. In short, you can write mobile, desktop and web applications using both of them.

Conclusion

At the end, it is all down to your preference. Are you a web developer trying to jump into the web application? You might find Vue easier to learn. Are you a functional programmer who is curious about front end development, you might find React easier to learn. The best way to chose between these two to take a short course on a free website. In a week, you will eventually understand how you feel about it and you will be able to make the right decision.

And please, stop trying to push your preference onto others.