关于Vue3的watch的问题
来源:6-18 watch和watchEffect的区别
JhinKoo
2021-12-18
我在练习watch的时候发现了一个小问题,老师看一下这个例子
export default {
name: "App",
setup() {
let state = reactive({
name: "Mr.Jack",
age: 18,
info:{
city:"Beijing"
}
});
function changeData(){
state.info.city = "shanghai";
}
watch(state,(newVal,oldVal)=>{
console.log("数据发生了变化")
console.log(newVal);
console.log(oldVal);
})
return {
state,
changeData
};
},
};
在这个例子中,监听state,默认会开启deep,也就是修改state.info.city会触发watch
但是在下面这个例子中,我监听state.info,如果不配置deep就不会触发watch,为什么呢?
watch(()=>state.info,(newVal,oldVal)=>{
console.log("数据发生了变化")
console.log(newVal);
console.log(oldVal);
},{deep:true}) //这里必须要开启deep配置不然就失灵了
所以就是,为什么监听state不用开deep,监听state.info就必须开启deep呢?这两者都是proxy对象呀
写回答
1回答
-
双越
2021-12-18
你把 watch(state, ...) 改为 watch(() => state, ...) 试试。按照文档里的写法,应该用函数
022021-12-19
相似问题