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

Vue 中操作data中数组的方法中哪些可以触发视图更新, 哪些不可以,不可以的话有什么解决办法?

在 Vue(尤其是 Vue 2) 中,data 里的数组操作有些方法能直接触发视图更新,有些则不会。
原因是 Vue 2 用的是 基于 Object.defineProperty 的响应式系统,它对数组的方法做了特别的处理,但有些变化检测不到。

可以触发视图更新的数组方法

Vue 2 内部 重写 了这些原型方法,调用它们时会触发视图更新:

修改数组内容的变更方法:
push()    // 末尾添加
pop()     // 删除最后一个
shift()   // 删除第一个
unshift() // 开头添加
splice()  // 删除/替换/添加
sort()    // 排序
reverse() // 反转

这些方法都能 触发响应式更新,因为 Vue 已经拦截它们。

不能触发视图更新的情况

Vue 无法检测 以下数组变动:

1.直接通过索引修改元素
this.list[1] = 'new value'; // ❌ 不会触发更新
2.直接修改数组长度
this.list.length = 0; // ❌ 不会触发更新

原因:Object.defineProperty 不能拦截数组索引的变化,也不能感知 length 的变化。

解决办法

方法 1:Vue.set() 或 this.$set()
// 替换索引 1 的值
this.$set(this.list, 1, 'new value');// 或者
Vue.set(this.list, 1, 'new value');
方法 2:用 splice() 代替
// 把索引 1 的值替换成 new value
this.list.splice(1, 1, 'new value');// 清空数组
this.list.splice(0);
Vue 3 的区别

Vue 3 用了 Proxy,可以直接监听索引赋值和 length 改变,所以:

this.list[1] = 'new value'; //  会更新
this.list.length = 0;       //  会更新

Vue 3 基本没有这个限制。

http://www.sczhlp.com/news/9755/

相关文章:

  • sublimeText安装配置插件-xml2json
  • Hbuilderx编译正常但无法打开微信开发者工具
  • solidity学习之ERC4626
  • ECharts技巧:如何按数据批次为柱状图设置不同颜色✔️♨️
  • 找到一个数的最低二进制位(lowbit)
  • 数字转人民币大写的函数
  • DP 优化专题
  • Git 常用命令总结
  • 解决 计算机有两个python环境导致 Pygal 模块导入错误
  • 详解:GPT-5 API如何在国内无限制使用?OpenAI最新发布的这款模型到底有何过人之处?
  • Linux Makefile
  • 【高等数学】第八章 向量代数与空间解析几何——第三节 平面及其方程 - 指南
  • 字符串的最大公因子
  • YACS2025年6月乙组
  • chrony时间同步服务详解
  • SAP工厂erp管理系统软件-适合生产型企业的erp系统推荐
  • 我去,Gitee官方推荐的开源项目,这程序我是不能干了,这功能真是逆天了
  • ArcGISProject工程文档的使用学习笔记
  • 8.4 ~ 8.10
  • MeshCN 太阳能 Mesh 网络:SX1262 芯片赋能,无网无电也能畅联
  • 中电金信 :从通用狂飙到穿透场景,行业智能化落地没有捷径
  • wls ssh 连接异常 Missing privilege separation directory: /run/sshd
  • Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:scrape manager 与 scrapeLoop
  • 洛谷P13030 [GCJ 2021 #1B] Subtransmutation
  • idempiere安装
  • 如何安装 Git (windows/mac/linux)
  • ActiveMQ 设置用户名密码
  • MySQL 8.0.42 手动部署全过程(CentOS 7 虚拟机 Linux)
  • PDF处理控件Aspose.PDF教程:在C#、Java、Python中快速缩小PDF
  • 自动化测试框架选型指南:5大主流工具实战对比