shallowRef 提升性能的核心是跳过深层响应式代理,仅对 .value 做引用级代理,避免 Proxy 爆炸、减少依赖收集、支持批量修改+手动触发更新,适用于读多写少的静态数据场景。

shallowRef 提升性能的核心,是跳过深层响应式代理——它只让 .value 这一层具备响应性,内部所有嵌套结构保持普通 JavaScript 对象,不走 Proxy 初始化和依赖追踪流程。
避免 Proxy 创建爆炸
一个含 5000 条记录的表格数据,若用 ref 或 reactive 包裹,Vue 会为每条记录及其每个字段(如 user.profile.address.city)创建独立 Proxy 实例。内存占用高、初始化慢。而 shallowRef 仅对整个数组实例做一次引用级代理,初始化耗时从几百毫秒降至几毫秒。
减少无效依赖收集
模板中访问 {{ list[0].name }} 时,ref 会逐层触发 getter:list → 数组索引 → item → name,每层都建立依赖;shallowRef 下,只有 list.value 的变更会被追踪,访问 list.value[i].name 完全不触发依赖收集,渲染更轻量。
支持批量修改 + 手动触发更新
当你需要更新大量嵌套字段(比如统一设置 2000 行的 status),可直接操作 shallowRef.value 内部数据,最后调用 triggerRef() 统一通知一次更新,避免每改一个字段都触发重渲染:
从零开始编排 SpringBoot+Vue 全栈项目工作流,适用于新建全栈项目或完整脚手架请求,触发后依次调用 product‑spec‑builder(需求调研)等模块。
立即学习“前端免费学习笔记(深入)”;
tableData.value.forEach(row => row.status = 'processed')-
triggerRef(tableData)—— 仅一次响应式通知
适配只读或整块替换场景
适合 API 响应快照、菜单配置、静态字典等“读多写少”结构。只要你不监听 config.theme.colors.primary 的变化,就该用 shallowRef(config)。后续整块替换 config.value = newConfig 即可,安全且高效。
不复杂但容易忽略:用对时机比用对 API 更重要。


















