computed 和 watch 都是 Vue.js 中用于监听数据变化的方法,但两者有以下区别:
computed:
- 它的结果会被缓存,除非它的依赖数据发生变化才会重新计算。
- 它更适合用于计算的数据结果。
- 它只有 getter,没有 setter。
使用方式:
js
computed: {
fullName() {
return this.firstName + ' ' + this.lastName
}
}
示例:
html
<p>Full Name: {{ fullName }}</p>
js
data: {
firstName: 'John',
lastName: 'Doe'
},
computed: {
fullName() {
return this.firstName + ' ' + this.lastName
}
}
watch:
- 它更适合监听单个数据的变化。
- 它有 getter 和 setter,可以在数据变化后执行异步操作或开销较大的计算任务。
使用方式:
js
watch: {
firstName(newValue, oldValue) {
// 这个回调将在 `firstName` 改变后调用
}
}
或者
js
watch: {
'user.name': function(newName, oldName) {
// 这个回调将在 `user.name` 改变后调用
}
}
示例:
js
watch: {
firstName(newValue, oldValue) {
this.fullName = newValue + ' ' + this.lastName
}
}
所以:
computed 更适合用于计算属性,它的缓存性能更高。
watch 更适合监听单个数据的变化,可以执行异步或开销较大的操作。
理解 computed 和 watch 的区别,可以让我们在 Vue.js 中选择更为恰当的数据监听方式,实现更优雅的逻辑处理。