学习vue3源码 - proxyRefs

101 阅读1分钟

前言

罪恶的一年过去了,发现我自己面试老是被各种问题难倒! 思来想去发现!主要还是基础不牢!地动山摇!所以打算好好去学习一下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)
      }
    }
  })
}