The Difference between COMPUTED and WATCHERS in Vue.js

Understanding when to use watchers instead of computed and vice versa

Photo by Tim Gouw on Unsplash

After writing my first article about The Difference Between Computed and Methods in Vue.js, I noticed that many people were confused about another difference, the one between computed properties and watchers.

I think the reason why this happens is that they can both run when a value changes.

I had the same doubt, so let’s see when to use watchers instead of computed and vice versa.

Computed properties

Computed properties are very handy for manipulating data that already exists. They are cached based; this means that the function will run only once until the values don’t change again (also if it’s called many times in the same template).

You can think to use them anytime you need to sort through a large group of data, and you don’t want to rerun those calculations every time if you don’t need it.

Let’s look at a basic example.

JS

new Vue({

el: '#app',

data: {

firstName: "Mario",

lastName: "Rossi",

},

computed: {

fullName: function() {

return this.firstName + " " + this.lastName

}

}

})

HTML

<div id="app">

{{fullName}}

</div>

OUTPUT

Mario Rossi

Watchers

Watchers allow you to listen to the data object and run whenever a specific property changes.

Moreover, as we can also read on the official guide

This is most useful when you want to perform asynchronous or expensive operations in response to changing data

Let’s look at a basic example.

JS

new Vue({

el: '#app',

data: {

counter: 0,

},

methods: {

increase: function() {

this.counter ++

},

winner: function() {

alert("you won")

}

},

watch: {

counter: function (val) {

if(val >= 5) { // When this happens run this function

this.winner()

}

}

}

})

HTML

OUTPUT

The alert with the text "you won" when the counter will be equal or greater than 5

I hope these examples have clarified your doubts.

Lastly, let’s see when to use them to meet our needs better.

When to use Computed or Watchers?

Use watchers when

You want to listen when a data property changes

when a data property changes You want to watch a data property until it reaches some specific value and then do something

Ps. you can’t watch multiple properties at the same time

Use computed properties when: