
vue3 中 reactive 接收基础数据类型不会响应式
在 Vue3 中,使用 reactive 创建响应式变量时,如果传入的是基础数据类型(如数字、字符串),尽管控制台会提示警告“value cannot be made reactive”,但界面的显示仍然会随着时间的推移而改变。这个问题让人感到困惑,尤其是在我们没有同时使用 ref 创建响应式对象时。
其实,reactive 本质上只支持代理对象。尽管我们传入的是基础数据类型,reactive 会自动创建一个封装它的对象。但是,这个对象并不是真正的响应式对象。真正的响应式对象需要使用 ref 创建。
当我们同时使用 ref 定义的变量时,reactive 创建的变量也会响应式更新。这是因为 ref 创建的变量是一个响应式对象,vue3 的依赖收集是以组件为单位的。因此,render 函数会收集对 msgRef 的依赖。当 msgRef 更新后,会触发更新依赖,导致 render 函数重新执行。基于 diff 算法,它会找出需要更新的部分。此时,msgReactive 只是恰好也更新了,而已搭上了 msgRef 的顺风车。










