watch 自动深层次监视 reactive对象
watch 监视 ref对象
的value(其实监视的也是 reactive对象
),
watch 监视 ref对象
手动开启深层监视( deep:true )
setup内可以写多个watch函数, 分别监视多个不同的数据.
可以将多个监视数据放入数组
第一个: 监视对象(ref,多个ref数据)
第二个: 回调函数
// 组合api--watch,监视一个ref数据
watch(sum, (newValue, oldValue) =>
console.log("sum发生改变了", newValue, " ← ", oldValue)
);
// 组合api--watch,监视多个ref数据
// 将多个ref数据放入监视对象数组中,
watch([sum, hello], (newValue, oldValue) =>
console.log("sum/hello发生改变了", newValue, " ← ", oldValue)
);
第三个: 监视配置
{
// 立即执行
immediate:true,
deep:true
}
问题:
1.无法正确获得oldValue
2.强制开启深层监视, 无法关闭
ref参数是对象的话, ref会自己调用reactive
// 监视对象,oldValue信息获取失败
watch(person, (newValue, oldValue) => {
console.log("对象person数据改变了", newValue, "←", oldValue);
});
监视对象是箭头含的返回值
// 监视对象的某个属性,第一个参数:是返回该对象属性的箭头函数
watch(
() => person.name,
(newValue, oldValue) => {
console.log("对象person.name数据改变了", newValue, "←", oldValue);
}
);
第一个参数是箭头函数数组
// 监视对象的某些属性,第一个参数:是由返回该对象属性的箭头函数组成的数组
watch([() => person.name, () => person.age], (newValue, oldValue) => {
console.log(
"对象person.name/person.age数据改变了",
newValue,
"←",
oldValue
);
});
要开启深层监视 – deep:true
// 监视对象的对象属性,第三个参数:开启深层监视
watch(
() => person.job,
(newValue, oldValue) => {
console.log(
"对象person的对象属性person.job数据改变了",
newValue,
"←",
oldValue
);
},
{ deep: true }
);
不说监视谁, 用到谁监视谁, 内部可以包括请求
立刻执行
// 智能监视对象, 类似computed,但是注重过程,过程中用到什么监视什么
watchEffect(() => {
// person.name, person.age, person.job.salarys;
// console.log(person.name, person.age, person.job.salary);
});