【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); 
};
相关推荐
程序员黑豆3 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
bugcome_com6 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC6 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕6 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
起床学FPGA8 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript
Fluxart.ai8 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术9 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码9 小时前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep9 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
kyriewen9 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试