Why I Picked Vue.js as My Freelancer Niche
Tags: freelancer, vue, freelancing, frontend
Published: 2021-09-21 08:50:48

---
title: Why I Picked Vue.js as My Freelancer Niche
published: true
date: 
tags: freelancer, vue, freelancing, frontend
canonical_url: https://www.mokkapps.de/blog/why-i-picked-vue-js-as-my-freelancer-niche/
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r30vgayo33b4dlnfhsjk.jpg
---

I have professional experience with the three big players in web development: [Angular](https://angular.io), [Vue.js](https://vuejs.org/) and [React](https://reactjs.org/). I’ve reached the point in my career where I need to choose one of the three frameworks/libraries that I will use for my future freelancing career.

As the title already reveals, I chose Vue and in this article, I will describe to you why I picked it instead of React or Angular.

⚠️ This article will not provide a full comparison between the three technologies.

## Table of Contents[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#table-of-contents)

- [Why Do I Need a Niche?](#why-do-i-need-a-niche)
- [My Freelancing History](#my-freelancing-history)
- [What I Love About Vue](#what-i-love-about-vue)
- [What I Don’t Like In Vue](#what-i-dont-like-in-vue)
- [What I Miss In Vue](#what-i-miss-in-vue)
- [Vue’s Popularity](#vues-popularity)
- [Conclusion](#conclusion)

## Why Do I Need a Niche?[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#why-do-i-need-a-niche)

[![Find Your Audience](https://www.mokkapps.de/static/e5a7913be44c6ec5f386bf8c73908721/15ec7/whiteboard-audience.jpg "Find Your Audience")](/static/e5a7913be44c6ec5f386bf8c73908721/eea4a/whiteboard-audience.jpg)<figcaption>Find Your Audience</figcaption>

Finding your niche as a freelancer can have an extremely positive impact on your career. It took me some time to find mine, but finally, I found it and I can take my business to the next level. It has some advantages to be a jack of all but in the end, it’s even better to be the master of one trade. Having a niche can boost your income, helps to find new projects easier, and is useful to advertise yourself as an expert.

I can also give you an example of how the niche saves me time every day:

My previous search queries for job agents on freelancer platforms looked like this: `React OR Angular OR TypeScript OR JavaScript OR React Native OR Vue`. This way, I got job agent emails with dozens of job offers that I had to manually scan for interesting projects.

With a niche in place, I modified these search queries to `Vue` and now the job agent emails contain only a few freelancer projects but they are tailored to my skills.

## My Freelancing History[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#my-freelancing-history)

When I started freelancing back in 2019 my tech focus was on web development using the [Angular](https://angular.io) framework. But for my first freelancing project I choose a [Vue.js](https://vuejs.org/) project and I stayed there for about two years. I chose this project because I already had professional experience with Angular and some experience with React as I used it for my [portfolio website](https://mokkapps.de) and two React Native apps that I developed and published. I wanted to see how it compares to Angular and React. After this project, beginning from January to September 2021 I worked in a [React](https://reactjs.org/) project as I wanted to gain some professional experience with the library.

I could easily further specialize in Angular, but I have no good belly feeling with this choice. Therefore, I had to choose between React and Vue.

## What I Love About Vue[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#what-i-love-about-vue)

> TL;DR: In my opinion, Vue.js combines the best parts of Angular and React. Vue.js is a more flexible, less opinionated solution than Angular but it’s still a framework and not a UI library like React.

[![Framework Comparison](https://www.mokkapps.de/static/b81b38b8a530103ace13f198f6d5f6b0/15ec7/framework-comparison.jpg "Framework Comparison")](/static/b81b38b8a530103ace13f198f6d5f6b0/d9c39/framework-comparison.jpg)<figcaption>Framework Comparison</figcaption>

### Less Usage of JavaScript’s “this” keyword[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#less-usage-of-javascripts-this-keyword)

Angular components are full of the JavaScript keyword `this`. I don’t like this and thankfully we can write React and Vue components without the `this` keyword by using [React Hooks](https://reactjs.org/docs/hooks-intro.html) and [Vue 3’s Composition API](https://v3.vuejs.org/api/composition-api.html).

### Outstanding Documentation[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#outstanding-documentation)

The [official Vue documentation](https://v3.vuejs.org/guide/introduction.html) is amazing and one of the best resources to learn Vue.

### Best Parts of React and Angular[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#best-parts-of-react-and-angular)

In its early development phase, Vue took inspiration from the good things of [AngularJS](https://angularjs.org/) (the first version of Angular). Vue also got inspired by React and they share some similarities:

- They have their focus in the core library. Concerns like global state management and routing are handled by separate companion libraries.
- Both provide reactive and composable view components.
- One and the other use a virtual DOM.

### Less Optimization Efforts[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#less-optimization-efforts)

In Vue, I need to care less about optimization efforts in comparison to React. React triggers a re-rendering of the entire component tree when a component’s state changes. Read my article [“Debug Why React (Re-)Renders a Component”](https://www.mokkapps.de/blog/debug-why-react-re-renders-a-component/) for further details.

There are multiple ways to avoid unnecessary re-rendering of child components in React:

- use [PureComponent](https://reactjs.org/docs/react-api.html#reactpurecomponent)
- implement `shouldComponentUpdate` if you are using class components
- use immutable data structures

Angular developers also need to take care of the change detection, you can read my article [“The Last Guide For Angular Change Detection You’ll Ever Need”](https://www.mokkapps.de/blog/the-last-guide-for-angular-change-detection-you-will-ever-need/) if you want to deep-dive into that mechanism.

Vue automatically tracks a component’s dependencies during its render. Therefore, it knows precisely which components need to be re-rendered when the state changes. As a Vue developer, I can more focus on building the app than on performance optimizations.

### Templates[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#templates)

Vue uses HTML templates, but there’s an option to write the render function in [JSX](https://reactjs.org/docs/introducing-jsx.html). On the other hand, in React there’s solely JSX. A Vue component is split into three parts: HTML (`<template>`), CSS (`<style>`) and JavaScript (`<script>`) which most web developers should already be familiar with.

In React, we use JSX to render our component’s template. This has some advantages:

- You don’t have to learn an extra DSL (Domain-Specific Language) but can use pure JavaScript to build your view.
- JSX has good tooling support (e.g. linting, type checking, and editor auto-completion).

I liked this approach in the beginning but I have changed my opinion. For beginners, it might be really helpful to write the templates in JSX because they need to learn JavaScript basics like `Array.prototype.map()` to render lists. But writing code using an extra DSL (Domain-Specific Language) helps us to write less code.

[Rich Harris](https://twitter.com/Rich_Harris) wrote a great blog post [“Write less code”](https://svelte.dev/blog/write-less-code) that reminds us that all code is buggy:

> All code is buggy. It stands to reason, therefore, that the more code you have to write the buggier your apps will be.

More code

- takes more time
- number of bugs grows quadratically with the size of the codebase
- is harder to review in the code review process

So using the DSL provided by Angular and Vue we write less code which is good.

### Scaling Up[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#scaling-up)

React provides a robust routing ([React Router](https://reactrouter.com/)) and state management solution ([Redux](https://redux.js.org/)) that are maintained by the community and create a more fragmented ecosystem. Vue provides companion libraries for routing and state management which are all officially supported and kept up-to-date with the core library. This is similar to the Angular framework which provides a collection of well-integrated libraries that cover a wide variety of features, including routing, forms management, client-server communication, and more.

### Scaling Down[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#scaling-down)

Getting started with Vue is much simpler than with React or Angular as you can use it completely without any build system and just use a single script tag in your HTML.

```html
<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
```

I already used this simple approach in a large [Django](http://www.djangoproject.com/) monolithic application to be able to add new UI features without using the Django templating engine based on Python.

I know it’s also possible to use React with Babel Standalone but this is not a suitable approach for production usage.

### TypeScript[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#typescript)

Vue 3 is written in [TypeScript](https://www.typescriptlang.org/) so we don’t need any additional tooling to use TypeScript with Vue - it has first-class citizen support. Angular is even stricter and uses TypeScript per default.

## What I Don’t Like In Vue[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#what-i-dont-like-in-vue)

### Community[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#community)

Vue already has a good community but React is way more popular and therefore the community is bigger.

### Less opinionated[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#less-opinionated)

Angular is very opinionated and I like that for large applications. Vue is less opinionated and has no restrictions on how you structure your code or which build system you use. I like to have some restrictions in my framework as this reduces discussion time between developers.

## What I Miss In Vue[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#what-i-miss-in-vue)

### Better Mobile App Support[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#better-mobile-app-support)

Vue.js does not natively support mobile app development. There are a [number of solutions](https://v3.vuejs.org/guide/mobile.html#hybrid-app-development) for creating native iOS and Android apps with Vue.js but React and [React Native](https://reactnative.dev/) provide a better experience for React developers.

### Angular’s HTTP module[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#angulars-http-module)

I love that Angular provides a separate [HTTP module](https://angular.io/guide/http) to be able to communicate with servers using the HTTP protocol. It provides features like:

- The ability to request typed response objects.
- Streamlined error handling.
- Testability features.
- Request and response interception.

Vue provides no specific library to make HTTP requests so you can either use the Fetch API or libraries like [axios](https://github.com/axios/axios).

### Angular’s Forms Module[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#angulars-forms-module)

Vue does not provide a form validation pattern like Angular’s [Reactive Forms](https://angular.io/guide/reactive-forms) but we can use 3rd party libraries like [Vuelidate](https://vuelidate-next.netlify.app).

## Vue’s Popularity[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#vues-popularity)

In [StackOverflow’s 2020 Developer Survey](https://insights.stackoverflow.com/survey/2020#overview) we can see that Vue.js is not as popular as Angular and React:

[![StackOverflow 2020 Developer Survey](https://www.mokkapps.de/static/dda4c5ff03c7e22ad702c73017e17f53/15ec7/stackoverflow-web-frameworks.jpg "StackOverflow 2020 Developer Survey")](/static/dda4c5ff03c7e22ad702c73017e17f53/d9c39/stackoverflow-web-frameworks.jpg)<figcaption>StackOverflow 2020 Developer Survey</figcaption>

We can see the same in [HackerRank’s 2020 Developer Skills Report](https://research.hackerrank.com/developer-skills/2020). But in this report Vue.js has shown steady growth, rising one spot per year since 2018:

[![HackerRank 2020 Developer Skills Report: Best known frameworks 2018-2020](https://www.mokkapps.de/static/1f9babcfc2bc937410c8658bc748f5a6/15ec7/hacker-rank-best-known-frameworks-2018-2020.jpg "HackerRank 2020 Developer Skills Report: Best known frameworks 2018-2020")](/static/1f9babcfc2bc937410c8658bc748f5a6/c23a4/hacker-rank-best-known-frameworks-2018-2020.jpg)<figcaption>HackerRank 2020 Developer Skills Report: Best known frameworks 2018-2020</figcaption>

Additionally, 23.6% of the developers want to learn Vue.js next:

[![HackerRank 2020 Developer Skills Report: Which frameworks do you plan on learning next?](https://www.mokkapps.de/static/359b135ac7a8c87da4297c82c35c7230/15ec7/hacker-rank-learn-next.jpg "HackerRank 2020 Developer Skills Report: Which frameworks do you plan on learning next?")](/static/359b135ac7a8c87da4297c82c35c7230/7e7db/hacker-rank-learn-next.jpg)<figcaption>HackerRank 2020 Developer Skills Report: Which frameworks do you plan on learning next?</figcaption>

[The State of JavaScript Survey 2020](https://2020.stateofjs.com/en-US/) shows that developers are more and more interested in React and Vue.js but get less interested in Angular:

[![State of JavaScript 2020: Positive/Negative Split](https://www.mokkapps.de/static/51b81bfab8e0c2400048fb1ecb2f7356/15ec7/state-of-js-2020-positive-negative-split.jpg "State of JavaScript 2020: Positive/Negative Split")](/static/51b81bfab8e0c2400048fb1ecb2f7356/d9c39/state-of-js-2020-positive-negative-split.jpg)<figcaption>State of JavaScript 2020: Positive/Negative Split</figcaption>

## Conclusion[<svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>](#conclusion)

I’m pretty happy with my choice and the future will show if it was the right decision or not.

Which framework or technology did you pick for your niche? Tell me in the comments!

If you liked this article, follow me on [Twitter](https://twitter.com/mokkapps) to get notified about new blog posts and more content from me.