import {ref,shallowRef,triggerRef,customRef} from 'vue'
let msg = ref('小王')
let obj = shallowRef({
name:'小小王'
})
const handleCheckBut = ()=>{
// msg.value = '大王'
obj.value.name = '大大王'
// triggerRef(obj)
}
代码中修改了由shallowRef创建的对象的属性,因为shallowRef只跟踪到.value,不会再往下跟踪,所以这次修改并不会触发试图更新。
import {ref,shallowRef,triggerRef,customRef} from 'vue'
let msg = ref('小王')
let obj = shallowRef({
name:'小小王'
})
const handleCheckBut = ()=>{
// msg.value = '大王'
obj.value.name = '大大王'
triggerRef(obj)
}
而当我们添加了triggerRef后,试图是会更新的。
import {ref,shallowRef,triggerRef,customRef} from 'vue'
let msg = ref('小王')
let obj = shallowRef({
name:'小小王'
})
const handleCheckBut = ()=>{
msg.value = '大王'
obj.value.name = '大大王'
// triggerRef(obj)
}
现在有一个由ref创建的变量,我们修改了他的value,并且将triggerRef注释掉了,按理来说obj的更新是不会驱动视图的。但结果确实obj和msg一同在视图上更新了。
导致这个问题的原因是,ref触发视图更新的api和triggerRef触发视图更新的api是同一个api,而shallowRef在创建变量的时候其实是已经收集了依赖的,只不过没有去更新视图,恰好这个时候ref创建的变量更新导致触发了更新视图的函数,所以将已经收集的依赖一起都更新了。
网友评论