What is the difference Between watch and watchEffect in Vue.js 3?
There are a few cases where we may need to track a reactive property, and we can do this by utilizing a Vue watcher.
In Vue.js 3, in addition to the watch
method, there’s a new watchEffect
method.
How Does Vue watchEffect Work?
watchEffect
is one of the approaches to track reactive dependencies in Vue3. We can simply write a method utilizing reactive properties, and at whatever point one of their values updates, our method will run.
One thing to note is that watchEffect
will likewise run immediately at whatever point the component is initialized in addition to running when the dependency changes, so careful when attempting to access the DOM before it's mounted.
watchEffect Example:
let’s assume that we have a type of reactive userID
property and simply need to log whenever it changes.
The code would resemble this:
setup () {
const userID = ref(0)
watchEffect(() => console.log(userID))
setTimeout(() => {
userID.value = 1
}, 1000)
/*
* LOG
* 0
* 1
*/
return {
date
}
}
So right when our component is instated, our watchEffect
will run and log the initial value. Then, at whatever point the value of userID
changes, our watchEffect
will be triggered.
Difference Between watch vs watchEffect
So for what reason does this new watchEffect
technique even exist when there's a watch
method?
There are some key differences.
watchEffect
will run a method at whatever point any of its dependencies are changed, while watch tracks a particular reactive property and will possibly run when that property changes.
On the other hand, the watch
tracks a particular property or properties and will possibly run when it changes. Likewise, with the way that a watch
method is set up, it contains the old value of the property just as its updated value.
Additionally, the watch
is lazy, so it will possibly trigger when the dependency changes. watchEffect
runs immediately when the component is created and afterward tracks dependency.
So watch
is useful for when:
You need to control which dependencies trigger the method.
You need access to the previous value.
You need to lazily perform the method.
Obviously, I can't tell you which is best for your task. However, ensure you know the reasons why you're making a coding design choice.
Please login or create new account to add your comment.