【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); 
};
相关推荐
码喽7号2 小时前
vue学习五:前端路由VueRouter
前端·vue.js·学习
史迪仔01122 小时前
[QML] 交互事件深度解析:鼠标、键盘、拖拽
前端·c++·qt
ZC跨境爬虫2 小时前
海南大学交友平台开发实战 day11(实现性别图标渲染与后端数据关联+Debug复盘)
前端·python·sqlite·html·json
GISer_Jing2 小时前
前端JS面试6大核心考点详解
前端·javascript·面试
ai大模型中转api测评2 小时前
2026年前端新工具:Gemini 3.1 SVG工作流从Prompt到部署
前端·人工智能·prompt·api
yyuuuzz2 小时前
独立站搭建:从基础到避坑的实战分享
前端·javascript·github
星空椰2 小时前
JavaScript 基础入门:从零开始掌握变量与数据类型
开发语言·前端·javascript·ecmascript
千寻简2 小时前
一个让 Claude Code 顺手很多的状态栏插件:claude-hud
前端·后端
掘金者阿豪2 小时前
数据库安全第一关:用户密码存储与认证机制的深度拆解
java·前端·后端