当前位置: 首页 > 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.xdnf.cn/news/1139149.html

相关文章:

  • Python元组(Tuple)指南
  • FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡
  • 爬虫小知识
  • 【Lua】题目小练2
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘django’问题
  • vue-cli 模式下安装 uni-ui
  • JAVA面试宝典 -《Kafka 高吞吐量架构实战:原理解析与性能优化全攻略》
  • 图片上传实现
  • 多方案对比分析:后端数据加密策略及实践
  • Redis7 底层数据结构解析
  • Linux驱动14 --- 平台设备总线
  • JPA 与 MyBatis-Plus 数据库自增主键实现方案
  • GraphQL的N+1问题如何被DataLoader巧妙化解?
  • 【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • deep learning(李宏毅)--(六)--loss
  • 虚拟化测试工具Parasoft Virtualize如何为汽车企业提供仿真测试?
  • Helm-k8s包管理工具(一)核心概念、helm工作目录
  • 【Servo】伺服驱动器扫频功能方案文档
  • 有痛呻吟!!!
  • Redis面试相关问题总结
  • 离散与组合数学 杂记
  • 学习设计模式《十八》——备忘录模式
  • AI安全威胁之MCP Server投毒攻击实践
  • 深入理解进程等待:wait的简化与waitpid的灵活性
  • centos中新增硬盘挂载文件夹
  • 【FFmpeg 快速入门】本地播放器 项目
  • 林曦词典|文质彬彬
  • 物联网主机在化工园区安全风险智能化管控平台中的应用
  • mongodb 入门级别操作