前言
罪恶的一年过去了,发现我自己面试老是被各种问题难倒! 思来想去发现!主要还是基础不牢!地动山摇!所以打算好好去学习一下vue3的源码,做一些整理笔记,如果有哪里不对还请各位大佬批评指正
用处:
vue3的模板html中使用被ref代理过的基本数据类型的数据,取值都不需要value的方式去取值,但在js中取值需要去取value;主要就是通过proxyRefs去实现
思路:
主要在set和get的时候判断是不是ref,如果是ref就返回value,否则就返回本身
export function proxyRefs(object) {
return new Proxy(object, {
get(target, key, receiver) {
let r = Reflect.get(target, key, receiver)
return r.__v_isRef ? r.value : r // 自动脱ref
},
set(target, key, value, receiver) {
const oldValue = target[key]
if (oldValue.__v_isRef) {
oldValue.value = value // 如果老值是ref 需要给ref 赋值
return true
} else {
return Reflect.set(target, key, value, receiver)
}
}
})
}