watch是Vue的一个选项,它允许我们监听某个值的变化,从而触发对应处理逻辑。watch可以监听单个值或多个值,computed只能有返回值,依赖多个值计算得出一个结果。
watch与computed的主要区别有:
- computed具有缓存功能,只有在它依赖的数据发生改变时才会重新计算,watch每次依赖数据变化都会执行。
- computed一般用于计算数据依赖复杂逻辑,watch更适用于执行异步操作或开销较大的计算。
例如:
js
computed: {
fullName() {
return this.firstname + ' ' + this.lastname
}
}
watch: {
firstname(newValue, oldValue) {
this.fullName = newValue + ' ' + this.lastname
}
}
上面这段代码,如果firstname没有发生变化,则computed的fullName不会重新计算,而每次firstname变化,watch都会执行对应的函数。
所以,总结如下:
- 使用computed:
- 当依赖的数据需要经过复杂的计算或处理得到最终值时。(computed具有缓存)
- 需要根据多个数据计算一个新值时。
- 使用watch:
- 当需要在值变化后执行异步操作或开销较大的运算时。(watch每次执行)
- 需要监听某个值的变化,从而触发其他行为时。
- 需要深度监听复杂对象的值变更时。(通过deep选项)
所以,computed和watch都可以用于响应式数据的变化监听,但在具体使用场景和目的上有所区别。两个功能共同使用,可以使我们在Vue中实现完整的响应式。
网友评论