【Vue】什么时候用Ref?什么时候用shallowRef?

1、Ref (深层响应式)

当你把一个对象给 ref 时,它会通过 reactive 递归地把对象里的每一个属性都变成"遥控器"++(响应的自动绑定)++。无论你改到哪一层,Vue 都能收到信号。

  • 底层行为 :.value 指向的是一个经过 Proxy 包装后的响应式代理对象。
2、ShallowRef (浅层响应式)

shallowRef 只盯着 .value 本身。它只在 .value****被 整体替换时才会触发更新。如果你修改内部的属性,它会视而不见。

  • 底层行为 :.value 指向的是原始对象本身,没有经过 Proxy 包装。

当你在用 fabricJS、tiptap editor等这种第三方库外部大对象的时候,⚠️++不要用ref去绑定++

✅应该用++shallowRef 或者 直接用 普通变量++

⚙️原因:

使用 ref 会让 Vue 3 对 实例进行深层响应式代理。其中内部状态管理的属性和方法(EditorState、EditorView、事务分发)
会被 Proxy拦截,事务链路会被破坏,导致无法访问 或者 正确执行

3、triggerRef

是一个方法,触发shallowRef的局部更新

🌰使用场景

当你为了性能优化 使用 shallowRef 来保存大型数据结构(比如一个巨大的数组或地图对象),但偶尔又需要++局部修改它并更新界面++ 时,triggerRef 就派上用场了。

代码示例:

JavaScript

复制代码
import { shallowRef, triggerRef } from 'vue';

const userInfo = shallowRef({ name: '张三', age: 25 });

const updateName = () => {
  // 直接修改属性,视图不会更新
  userInfo.value.name = '李四'; 
  
  console.log(userInfo.value.name); // 打印 '李四',但页面显示的还是 '张三'

  // 手动触发更新
  triggerRef(userInfo); 
};
相关推荐
福兮说2 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
GreenTea3 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
科技观察哨3 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
niucloud-admin3 小时前
JAVA V6 多商户商城 开发文档——web前端
前端
颜进强4 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
今年下半年5 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
郑州光合科技余经理5 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
前端snow7 小时前
ai agent --- DeepAgents 中间件
前端
data analyse 4567 小时前
报表能自定义的国内统计工具有哪些
前端·数据分析