mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
443 字
1 分钟
Ref vs Reactive:响应式的哲学思考 (头秃篇)
2025-11-30

响应式的哲学#

在深入学习 Vue 3 的过程中,不管是新手还是老鸟,都会遇到一个经典问题:refreactive 到底用哪个?

官方的定义#

  • ref:接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property,指向该内部值。
  • reactive:返回对象的响应式副本。

看起来很简单,对吧?ref 处理基本类型,reactive 处理对象。但是在实际开发中,情况远比这复杂。

踩坑实录#

我曾经试图用 reactive 去定义一个数组,结果发现直接重新赋值会丢失响应性!

let list = reactive([])
// ... 异步获取数据后
list = newData // ❌ 响应性丢失!界面不更新!

为什么?因为 reactive 返回的是一个 Proxy 对象,直接赋值 list = newData 只是修改了变量 list 的引用,并没有修改原来的 Proxy 对象。

正确做法是用 ref,或者用 list.push(...newData)。但是 ref 每次都要写 .value,真的好烦啊!在模板里倒是会自动解包,但在 JS 逻辑里,少写一个 .value 就能让你调试半天。

深入思考#

ref 更像是“指针”,明确地告诉我们这里有一个需要被追踪的值;而 reactive 则更贴近原生对象的直觉。

Vue 官方现在也更推荐优先用 ref 声明响应式状态,原因正是 reactive 不能直接替换整个对象、解构后又容易断开响应式连接。对象结构稳定、需要成组修改时我仍会用 reactive,其余情况先用 ref,规则反而更好记。

也许,与其每次临场纠结,不如先统一用 ref?毕竟,显式地使用 .value 虽然繁琐,但至少心安。

思考

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Ref vs Reactive:响应式的哲学思考 (头秃篇)
https://blog.luozili.work/posts/vue-learning-2/
作者
llbzow
发布于
2025-11-30
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录

💬
🎀