当前位置: 首页 > news >正文

vue中的this.$set

在 Vue 2 中,this.$set 是一个用于响应式地添加新属性到已有对象的全局 API。它的主要作用是解决 Vue 无法检测到对象属性添加或删除的限制(由于 Vue 2 的响应式系统基于 Object.defineProperty 实现)。


1. 为什么需要 this.$set

在 Vue 2 中,直接给对象添加新属性(如 this.obj.newProperty = value不会触发视图更新,因为 Vue 无法拦截这种动态添加的属性变化。


2. 语法

this.$set(target, propertyName, value)
  • target:目标对象(必须是响应式对象,如 Vue 实例的 data 或 Vuex 的 state)。
  • propertyName:要添加的新属性名(字符串或 Symbol)。
  • value:新属性的值。

3. 示例

场景 1:动态添加对象属性
// 错误写法(不会触发视图更新)
this.user.age = 25;// 正确写法(使用 $set)
this.$set(this.user, 'age', 25);
场景 2:动态更新数组索引

虽然 Vue 2 对数组的响应式处理有类似限制(无法直接通过索引修改数组,如 this.arr[0] = newValue),但 $set 也可以用于数组:

// 错误写法
this.items[0] = { name: 'New Item' };// 正确写法
this.$set(this.items, 0, { name: 'New Item' });

4. 替代方案(Vue 3 及 Composition API)

在 Vue 3 中,响应式系统改用 Proxy不再需要 $set,因为动态添加属性会自动被追踪:

// Vue 3 中直接添加即可
this.user.age = 25; // 会自动触发视图更新

5. 注意事项

  • 仅对响应式对象有效:如果 target 是非响应式对象(如普通字面量),$set 无效。
  • 优先使用 Vue.set:在非组件上下文(如普通函数)中,使用 Vue.set(obj, key, value)
  • 数组方法:对于数组,优先使用 Vue 重写的响应式方法(如 pushsplice)。

总结

Vue 版本是否需要 $set原因
Vue 2✅ 需要响应式系统基于 defineProperty
Vue 3❌ 不需要响应式系统基于 Proxy

在 Vue 2 中,遇到动态添加属性或数组索引更新的场景,记得用 this.$set

http://www.lryc.cn/news/590934.html

相关文章:

  • Spring Cloud LoadBalancer 详解
  • 理解 PS1/PROMPT 及 macOS iTerm2 + zsh 终端配置优化指南
  • javaScript中数组常用的函数方法
  • 【Java开发日记】我们来说说 LockSupport 的 park 和 unpark
  • python Flask 框架入门
  • stack,queue,priority_queue的模拟实现及常用接口
  • 从AWS MySQL数据库下载备份到S3的完整解决方案
  • istio如何自定义重试状态码
  • NLP——迁移学习
  • pytorch学习笔记(五)-- 计算机视觉的迁移学习
  • 浅探C语言的回调函数(Callback Function)
  • 要实现在调用  driver.get()  后立即阻止页面自动跳转到 Azure 登录页,可通过以下几种方法实现:
  • AWS Lambda 最佳实践:构建高效无服务器应用的完整指南
  • Kubernetes ConfigMap 深度指南
  • 大模型Agent应用开发实战:从框架选型到行业落地
  • ros2 标定相机
  • 三轴云台之测距算法篇
  • 《C++初阶之STL》【auto关键字 + 范围for循环 + 迭代器】
  • 【Dv3Admin】菜单管理集成阿里巴巴自定义矢量图标库
  • 大型语言模型(LLM)在网络安全中最具商业价值的应用场景(Grok3 回答 DeepSearch模式)
  • Python包测试全攻略:从单元测试到持续集成
  • sqli-labs靶场通关笔记:第24关 二次注入
  • LiteSQL:让C++与数据库无缝对接的ORM利器
  • 河南萌新联赛2025第一场-河南工业大学
  • Redis面试相关问题总结
  • string + 栈 bitset 可达性统计(拓扑排序)
  • Redis深度解析:从缓存原理到高并发实战
  • Go语言高并发聊天室(三):性能优化与压力测试
  • 防火墙准入与拦截技术文档
  • Qt初阶开发:QMediaPlayer的介绍和使用