ref 和 reactive 的区别
可监听的原始值不同
- ref 是通过构建一个对象 RefImp ,然后将值赋给 value,然后通过 Object.defineProperty 的 getter 和 setter 进行监听,如果监听的是一个对象会再次借助 reactive 实现深层监听。
- reactive 是通过构建 Proxy 实现监听, Proxy 不允许监听原始数据。
对象可变性
ref 是 RefImp 对象而 reactive 是原始对象的代理,这就导致了可以重新分配一个全新的对象给 ref 的 value 属性,而 reactive()不能。
收集依赖
- ref 是
Ref<T>
类型,可以直接自己通过 dep 收集依赖 - reactive 是原始对象类型,需要通过键值对收集依赖。
数据侦听不同
watch 默认只观察 ref 的 value,而对 reactive 则执行深度监听。