为什么 Vue3 中使用 reactive 创建基础数据类型变量不会响应式?

为什么 Vue3 中使用 reactive 创建基础数据类型变量不会响应式?

vue3 中 reactive 接收基础数据类型不会响应式

Vue3 中,使用 reactive 创建响应式变量时,如果传入的是基础数据类型(如数字、字符串),尽管控制台会提示警告“value cannot be made reactive”,但界面的显示仍然会随着时间的推移而改变。这个问题让人感到困惑,尤其是在我们没有同时使用 ref 创建响应式对象时。

其实,reactive 本质上只支持代理对象。尽管我们传入的是基础数据类型,reactive 会自动创建一个封装它的对象。但是,这个对象并不是真正的响应式对象。真正的响应式对象需要使用 ref 创建。

当我们同时使用 ref 定义的变量时,reactive 创建的变量也会响应式更新。这是因为 ref 创建的变量是一个响应式对象,vue3 的依赖收集是以组件为单位的。因此,render 函数会收集对 msgRef 的依赖。当 msgRef 更新后,会触发更新依赖,导致 render 函数重新执行。基于 diff 算法,它会找出需要更新的部分。此时,msgReactive 只是恰好也更新了,而已搭上了 msgRef 的顺风车。

以上就是为什么 Vue3 中使用 reactive 创建基础数据类型变量不会响应式?的详细内容,更多请关注www.sxiaw.com其它相关文章!