解构 reactive 对象会失效,因得到的是值副本而非响应式引用;toRefs 将所有顶层属性转为 ref 以保持响应式,适合批量解构;toRef 则精准处理单个属性,支持动态属性名和默认值。

直接解构 reactive 对象会切断响应式连接,得到的变量只是普通值,修改它不会触发视图更新。要让解构后的变量仍可响应,必须用 toRefs 或 toRef 显式创建响应式引用。
什么时候用 toRefs?
适合需要把整个响应式对象的所有顶层属性都解构出来,并保持响应性的场景,比如在 <script setup> 中向模板暴露多个字段。
- 接收一个
reactive对象,返回一个普通对象,其每个属性都是ref - 解构后需通过
.value修改(脚本中),模板中可直接使用(自动解包) - 源对象新增或删除属性时,
toRefs返回的对象不会自动同步新属性——它只处理调用时已存在的顶层属性
什么时候用 toRef?
适合只提取某一个特定属性,或属性名动态、可能暂不存在的情况,比如从 props 或异步加载的对象中“安全取值”。
- 接收响应式对象和属性名字符串,返回单个
ref - 即使该属性当前为
undefined或尚未定义,toRef仍返回有效ref,后续赋值会同步到源对象 - 修改
ref.value或源对象对应属性,两者始终双向同步
常见误区提醒
别混淆 ref 和 toRef:前者创建全新响应式容器,后者是源属性的“视图代理”。也别误以为 toRefs 能处理嵌套对象的深层响应性——它只作用于顶层,嵌套对象本身仍需用 reactive 或 toRef 单独处理。
立即学习“前端免费学习笔记(深入)”;


















