reactive和ref

117 阅读1分钟

自学中

ref本质也是reactive,ref(obj)等价于reactive({value:obj})

  1. reactive的参数必须是一个对象,包括json数据和数组都可以,否则不具有响应式
  2. reactiveVue3提供的一种用于包装对象的响应式对象的实现方式。
  3. refVue3提供的一种用于包装基本数据类型的响应式对象的实现方式。

cloud.tencent.com/developer/a…

www.bilibili.com/video/BV1Vt…

为什么有了reactive,还需要设计一个ref呢?

因为vue3响应式方案使用的是proxy,而proxy的代理目标必须是非原始值,只能是对象,没有任何方式能去拦截对对象作为包裹,间接实现原始值的响应式方案。

ref底层是否会使用reactive处理数据

RefImpI中非浅观察会调用toReactive()方法处理数据,toReactive()中先会判断传入的值是不是一个对象,如果是就用reactive进行处理,不是则直接返回值本身。

export const toReactive = <T extends unknown>(value: T): T => isObject(value) ? reactive(value) : value
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
    return raw ? toRaw(raw) : observed;
}