说说你对vue中watch的immediate和deep的理解
在 Vue.js 中,watch 是一个非常有用的选项,用于观察和响应 Vue 实例上的数据变化。watch 可以接收两个特定的选项:immediate 和 deep,这两个选项在特定场景下非常有用。
immediate
immediate 属性是一个布尔值,默认为 false。当设置为 true 时,watch 会在初始化时立即调用一次回调函数,而不是等到观察的数据第一次变化时才触发。
例如:
export default {
data() {
return {
value: 1
};
},
watch: {
value: {
handler(newValue, oldValue) {
console.log(`value changed from ${oldValue} to ${newValue}`);
},
immediate: true
}
}
};
在这个例子中,组件被创建时,watch 会立即触发一次,输出 value changed from undefined to 1。然后,每当 value 发生变化时,watch 都会再次触发。
deep
deep 属性也是一个布尔值,默认为 false。当设置为 true 时,watch 会深度遍历观察的对象,以便在其嵌套属性发生变化时也能触发回调函数。这对于观察复杂对象(如数组或嵌套对象)非常有用。
例如:
export default {
data() {
return {
obj: {
a: 1,
b: 2
}
};
},
watch: {
obj: {
handler(newValue, oldValue) {
console.log('obj changed');
},
deep: true
}
}
};
在这个例子中,如果你更改 obj.a 或 obj.b 的值,watch 会触发回调函数,因为 deep 选项被设置为 true。如果没有 deep 选项,只有当 obj 本身被替换为一个新的对象时,watch 才会触发。
总结
immediate:让watch在初始化时立即触发一次。deep:让watch深度观察对象,以便在其嵌套属性发生变化时也能触发。
这两个选项可以单独使用,也可以一起使用,以满足不同的观察需求。
浙公网安备 33010602011771号