{{ man2 }}

直接修改.value可以对shallowRef 绑定的数据进行视图响应
man2.value = {
name: '大满'
}

triggerRef强制执行更新视图,shallowRef和triggerRef一起使用可以达到ref的响应效果
shallowRef 和ref一起使用会被受到影响响应到页面上,因为ref会调用triggerRef强制执行更新视图
{{ man1 }}
{{ man2 }}
点击修改按钮后,视图都更新了

可以利用customRef结合定时任务,实现防抖
!!!在修改前如果有定时器(定时时间内多次修改),那么先关闭这个定时器,再继续修改(实现防抖效果)
const guanguan = MyRef('guanguan')
function MyRef(value: string) {
let timer: any
return customRef((track, trigger) => {
return {
get() {
track() //通知value的值会被修改,需要被追踪
return value
},
set(newVal) {
clearTimeout(timer) //在修改前如果有定时器(定时时间内多次修改),那么先关闭这个定时器,再继续修改(实现防抖效果)
timer = setTimeout(() => {
value = newVal
trigger() //去通知get()要重新渲染
console.log(guanguan)
timer = null
})
}
}
})
}
const change = () => {
guanguan.value = '大美女'
}
进行响应式数据判断,返回true和false
shallowRef和customRef都可以进行属于响应式数据都可进行判断
{{ guanguan }}
{{ guanguan1 }}
点击修改按钮后,guanguan1的数据不会响应到视图层,不会再实现双向绑定效果
解决办法:
let timer = setTimeout(() => {
guanguan1.off = {
name: [...num]
}
}, 500)
setTimeout(() => {
guanguan1.off = {
name: []
}
guanguan1.off.name.push(...num)
}, 500)
readonly:只读
isReadonly:判断是否只读
isShallow:判断是否属于浅层次响应
点击事件控制台打印:

适用于响应式对象的解构赋值
let {name, sex} = toRefs(guanguan)
原理:
const toRefs = (obj: T) => {
let map: any = {}
for (let key in obj) {
map[key] = toRef(obj, key)
}
return map
}
let {name, sex} = toRefs(guanguan)
将响应式对象转为非响应式对象
console.log(guanguan)
console.log(toRaw(guanguan))
