【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 分钟前
Web自动化测试
前端·python·pycharm·pytest
Kagol42 分钟前
Superpowers GSD gstack AgentSkills深度测评
前端·人工智能
excel2 小时前
JavaScript 字符串与模板字面量:从表象到本质理解
前端
京东云开发者2 小时前
当AI成为导演-如何用AI创作动漫短剧
前端
李白的天不白2 小时前
使用 SmartAdmin 进行前后端开发
java·前端
乘风gg3 小时前
🤡PUA AI Coding 工具 的 10 条终极语录
前端·ai编程·claude
学Linux的语莫3 小时前
Vue 3 入门教程
前端·javascript·vue.js
怕浪猫3 小时前
第一章、Chrome DevTools Protocol (CDP) 详解
前端·javascript·chrome
kyriewen3 小时前
从本地到生产:迁移到 GitHub Actions 自动化 CI/CD,总结了这 5 个坑
前端·github·自动化运维
雨季mo浅忆4 小时前
首个Vue3项目边写边学边记
前端·vue3