Vue Watch 的用法及最佳实践
什么是 Watch?
Watch 是 Vue 中一个强大的功能,用于响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,Watch 是最有用的。
Watch 的基本用法
1. 函数式写法
最简单的 watch 写法,适用于简单的监听场景:
js
export default {
watch: {
searchText() {
console.log('搜索文本发生变化')
}
}
}2. 对象式写法
当需要更多配置选项时,可以使用对象形式:
js
export default {
watch: {
searchText: {
handler(newValue, oldValue) {
console.log('新值:', newValue)
console.log('旧值:', oldValue)
},
immediate: true, // 组件创建时立即执行
deep: true // 深度监听对象的所有属性
}
}
}3. 监听对象的嵌套属性
js
export default {
watch: {
'user.name': {
handler(newValue) {
console.log('用户名变更为:', newValue)
}
}
}
}4. 使用 $watch 方法
适用于需要动态设置监听器的场景:
js
export default {
mounted() {
this.$watch(
'searchText',
(newValue, oldValue) => {
console.log('搜索文本变化:', newValue)
},
{
immediate: true,
deep: true
}
)
}
}最佳实践
选择合适的写法
- 简单监听用函数式
- 需要配置选项用对象式
- 动态监听用 $watch
注意性能影响
- deep: true 会深度监听对象的所有属性,可能影响性能
- 建议只监听需要的具体属性
及时清理
- 使用 $watch 创建的监听器需要在组件销毁前清理
- 通过 $watch 返回的函数可以停止监听
js
export default {
mounted() {
const unwatch = this.$watch('searchText', () => {
// 监听处理
})
// 组件销毁前清理
this.$once('hook:beforeDestroy', unwatch)
}
}使用场景
- 数据变化时需要执行异步操作
- 需要监听路由变化
- 表单验证
- 数据联动
通过合理使用 Watch,可以优雅地处理各种数据变化场景,提高代码的可维护性。