watch 和 watchEffect 的适用场景
1. 明确知道要监听的数据
当你知道需要监听哪些特定的响应式数据,并在这些数据变化时执行某些操作时,可以使用 watch
javascript
javascript复制代码
export default {
data() {
return {
firstName: '',
lastName: ''
};
},
watch: {
firstName(newVal, oldVal) {
console.log(`First name changed from ${oldVal} to ${newVal}`);
},
lastName(newVal, oldVal) {
console.log(`Last name changed from ${oldVal} to ${newVal}`);
}
// deep: true 开启深度监听
}
};
在这个例子中,我们明确知道要监听 firstName
和 lastName
这两个数据的变化,并在它们变化时输出日志。
watchEffect 的适用场合
1. 自动追踪依赖 (某个数据,方法等)
当你不确定要监听哪些数据,或者数据之间的依赖关系不明确时,可以使用 watchEffect
。它会自动追踪组件内部使用的所有响应式数据,并在其中任何一个发生变化时触发回调。
javascript
javascript复制代码
export default {
data() {
return {
firstName: '',
lastName: ''
};
},
mounted() {
this.$watchEffect(() => {
console.log(`Full name: ${this.firstName} ${this.lastName}`);
});
}
};
在这个例子中,watchEffect
会自动追踪 firstName
和 lastName
这两个数据的变化,并在它们中的任何一个发生变化时输出全名。
2. 处理副作用
watchEffect
特别适用于处理副作用,即那些依赖于响应式数据但又不直接修改数据的操作。
javascript
javascript复制代码
export default {
data() {
return {
searchTerm: ''
};
},
mounted() {
this.$watchEffect(async () => {
const results = await fetchSearchResults(this.searchTerm);
this.results = results;
});
}
};
在这个例子中,我们使用 watchEffect
来监听 searchTerm
的变化,并在它变化时异步获取搜索结果。这里 fetchSearchResults
是一个假设的异步函数,用于获取与搜索词匹配的结果。当 searchTerm
变化时,watchEffect
会自动重新运行回调函数,并更新 results
数据。
总结来说,watch
更适合明确知道要监听哪些数据并需要更多控制选项的情况,而 watchEffect
则更适用于自动追踪依赖和处理副作用的场景。在实际开发中,应根据具体需求来选择使用哪一个。