Vue3 Computed Get Set

Posted on  by admin

Vue 3 is in beta and it’s subject to change. Vue 3 is the up and coming version of Vue front end framework.

It builds on the popularity and ease of use of Vue 2. In this article, we’ll look at Vue computed properties and watchers. We can add computed properties to derive some from an existing property.

Not the answer you're looking for? Browse other questions tagged vue.jsvue-composition-api or ask your own question.

For instance, we can write:. We added the message property to the object we return in data . Then we added the computed property to the object we passed into createApp .

Not the answer you're looking for? Browse other questions tagged vue.jsvuejs3vue-composition-apivue-script-setup or ask your own question.

Methods are inside it getters, so we return things derived from other properties. The method must be synchronous. Now when we type in something to the input, we’ll see the reversed version displayed below it.

We can achieve the same result by running a method to reverse the string. But it wouldn’t be cached based on their dependency if we use a regular method to return derived data.

Computed properties are cached based on the original reactive dependencies.


As long as this.message stays the same, reversedMessage won’t be run. However, if we have dependencies that aren’t reactive in our computed property, then the method won’t run.

In this case, we’ve to use methods to make them update. So something like:. We can have setters in our computed properties. For instance, we can write:. We have the firstName and lastName properties in the object we return with data .

Then we can create the getter for the fullName property by returning the 2 properties combined into one string.

The setter would be the set method which takes the newValue and then split it back into its parts. We set the this.firstName and this.lastName based on the combined string we have returned from get .

When this.firstName and this.lastName change then get is run. If get is run, then set is run. Computed properties work for most cases, but sometimes we need watchers to provide us with a more generic way to watch for data changes.

For example, we can use it by writing:. We have a getData method which takes a newName parameter and get some data from an API.

And then we have our watch property, which has an object with watchers.

  1. The name of the method would match the name of the instance property name. A watcher takes an old value and a new value as the parameter.
  2. And we can run what we want inside it. The code we run is async so we got to use a watcher instead of computed properties.

Computed properties and watchers let us watch for reactive data changes and let us run code when they change.


Enjoyed this article? If so, get more similar content by subscribing to Decoded, our YouTube channel! In the previous post we saw how and when to use computed properties.

In this post, I want to show you how to use getters and setters with computed properties. Computed properties are getter-only by default, but if you need to, you can also specify a setter.

To do this, we actually need to change our computed property from a function to an object with two properties; get and set. These properties are functions that are invoked when we use the computed property to retrieve and update the value, respectively.

Let’s begin to restructure the property. The logic to retrieve the property’s value is going to remain the same, so I can simply copy in the code from the old function.

As for the set function, you might have noticed that I added a newValue parameter. As the name of the parameter suggests, it will contain the new value whenever we assign a new value to the computed property.

Since I will be assigning the full name as a whole, I need to do a bit of splitting to accomplish the same behavior as before. I will also add an alert for this function so we can see when it gets called.

Then I will simply split the value by space and assign the first part to the firstName data property and the last part to the lastName property.

So within the set function, I simply update the data properties as I did within the other event listener.

So far so good. Let’s now get to actually using these functions. The next thing I will do, is to add a new button which will use the setter that we will implement. I will also need to add a new event listener for this button.

To use the setter function, all we need to do, is to assign a new value to the computed property as if it were a normal data property.

So I can just say this.fullName = ‘Mark Gonzales’. Vue.js will automatically detect this and invoke the setter function. Let’s be honest, this is pretty awesome! We don’t need to do anything to invoke the getter function; this is done automatically when we access the computed property.

Time to see our new code in action! When clicking the new button, we see an alert displaying the name that we are setting, proving that our setter function is indeed invoked.


If I close this dialog, we will see a new alert, this time from the getter function. This alert shows up because we just changed the value of the computed property, and therefore Vue.js will reactively update the DOM with the new value.

And there you have it, that’s how to use getters and setters with computed properties! Here is what you will learn:. How to build advanced Vue.js applications (including SPA).

How Vue.js works under the hood. Communicating with services through HTTP. Managing state of large applications with Vuex. Modified5 months ago.

I am trying to create a multi step form with composition api.In vue 2 I used to do it this way. Now I have my own store, I made this computed property to pass to my component stEmail: computed(() =>

How can I actually use this in get set?

I am trying do something like this but completely doesn't work. Or is there better way now to make multi step forms? As Gregor pointed out, the accepted answer included an anonymous function that doesn't seem to work, but it will work if you just get rid of that part.

Here's an example using