vue3 reactive接收基础数据类型也会响应式?
下面链接中用reactive和ref分别创建了两个变量,都接收数字1作为参数,绑定到界面上时,虽然控制台有warning “value cannot be made reactive: 1”,但是界面上的两个数字确实都会随着定时器的调用而响应式变化:https://sfc.vuejs.org/#eNp9kD...
而且当我去掉用ref定义的变量时,reactive就不会响应式了,这又是为啥呢?
回复
1个回答

test
2024-07-15
其实这个 Demo 中 reactive 的变量并不是响应式的, 看下 vue/reactivity 的源码就知道了,reactive 只能代理对象
至于为什么加上 msgRef 创建的变量就两个都会更新,原因是此处 msgRef 是一个响应式的对象,vue3 的依赖收集其实是以组件为单位的,所以这里其实 render 都会被收集为 msgRef 的依赖
当 msgRef 更新后,触发更新依赖,render 会重新跑一遍,基于diff算法来看那些部分需要更新,此时 msgReactive 只是恰好也更新了而已,相当于蹭着 msgRef 上了一趟车
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容