Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Vue 改变数据,页面不刷新的问题

Vue 改变数据,页面不刷新的问题

作者头像
谭光志
发布于 2020-09-28 02:43:30
发布于 2020-09-28 02:43:30
3.4K00
代码可运行
举报
文章被收录于专栏:编程技术分享编程技术分享
运行总次数:0
代码可运行

最近在用 element-ui 开发一个网站,使用 table 组件时,发现修改完数据,有时候会延迟一两秒,页面才会发生变化。

看了一下代码,发现修改数据的代码是这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// popupData是修改的数据,修改完后,赋值给对应的表格数据
this.tableData[this.currentRow] = this.popupData
注意事项(以下内容摘自官方文档

由于 JavaScript 的限制,Vue 不能检测以下数组的变动:

  1. 当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
  2. 当你修改数组的长度时,例如:vm.items.length = newLength

举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

为了解决第一类问题,以下两种方式都可以实现和 vm.items[indexOfItem] = newValue 相同的效果,同时也将在响应式系统内触发状态更新:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

你也可以使用 vm.$set 实例方法,该方法是全局方法 Vue.set 的一个别名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vm.$set(vm.items, indexOfItem, newValue)

为了解决第二类问题,你可以使用 splice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vm.items.splice(newLength)

所以,解决方法就是用 Vue.set 来代替直接赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.$set(this.tableData, this.currentRow, this.popupData)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
全面复习vue 教程 api 查漏补缺
由于要准备面试,这几天准备好好学习,学习不仅仅为了是应付面试,更是为了查漏补缺 看了几遍vue的官网,虽然看了很多遍,但每一遍都很有收获
拿我格子衫来
2022/01/24
3190
全面复习vue 教程 api 查漏补缺
列表渲染之数组、对象更新检测
数组更新检测API (opens new window) 对象更新检测API (opens new window)
小小杰啊
2022/12/21
1.3K0
Vue 实现数组四级联动
最近项目上有个需求就是做下拉列表的四级联动,使用的是vuejs + elementui,使用数组存储对象的形式做为列表渲染到页面上的数据,但是在下拉列表联动的时候发现几个问题,现在记录下解决办法,分享给大家。
逆锋起笔
2021/09/08
1.6K0
el-dialog里的数组不更新,在关闭的一瞬间更新了
但是在方法中更新数据不会重新渲染,其实这个问题的本质也不是dialog的问题,而是vue的机制问题,
宣言言言
2021/03/11
2.1K0
前端每日一题(10.18题目+10.17答案)
Vue2.x 中实现检测数组变化的方法,是将数组的常用方法进行了重写。Vue 将 data 中的数组进行了原型链重写,指向了自己定义的数组原型方法。这样当调用数组 api 时,可以通知依赖更新。如果数组中包含着引用类型,会对数组中的引用类型再次递归遍历进行监控。这样就实现了监测数组变化。
程序员法医
2022/12/20
2080
前端每日一题(10.18题目+10.17答案)
vue 中 $set与$delete的使用
Vue无法检测property的添加或移除,由于Vue会在初始化实例时对property执行getter/setter转换,所以propterty必须在data对象上存在才能让Vue将它转换为响应式的。例如
tianyawhl
2020/06/22
1.1K0
30 道 Vue 面试题,内含详细讲解(上)
本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性、框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度。
公号:咻咻ing
2019/09/10
1.1K0
30 道 Vue 面试题,内含详细讲解(上)
vue散碎知识点学习
为了解决方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
老梁
2019/09/10
2.1K0
2020前端技术面试必备Vue:(一)基础快速学习篇
本章节,我将带领大家一起刷Vue 技术点,来应对接下来的面试,此次会陆续更新Vue全家桶:Vue VueX Vue-Router ;以及后面时间充足的话,来实现一个Vue项目。
程序员海军
2021/10/11
1.9K0
2020前端技术面试必备Vue:(一)基础快速学习篇
Vue 数组操作
变异方法(mutation method),顾名思义,会改变被这些方法调用的原始数组。相比之下,也有非变异(non-mutating method)方法,例如: filter(), concat() 和 slice() 。这些不会改变原始数组,但总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组:
全栈程序员站长
2022/08/05
6890
梳理vue双向绑定的实现原理
Vue 采用数据劫持结合发布者-订阅者模式的方式来实现数据的响应式,通过Object.defineProperty来劫持数据的setter,getter,在数据变动时发布消息给订阅者,订阅者收到消息后进行相应的处理。
周陆军
2019/02/14
1.2K0
vue基础(学习官方文档)
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 --> <button @click.ctrl="onClick">A</button> <!-- 有且只有 Ctrl 被按下的时候才触发 --> <button @click.ctrl.exact="onCtrlClick">A</button> <!-- 没有任何系统修饰符被按下的时候才触发 --> <button @click.exact="onClick">A</button>
全栈程序员站长
2022/09/20
5.5K0
vue基础(学习官方文档)
vue的双向绑定原理_vue2双向绑定原理
今天要讲的内容是Web前端框架vue.js中的一个细节,注意是细节哦,稍不留神就掉坑里了。
全栈程序员站长
2022/11/02
8640
vue的双向绑定原理_vue2双向绑定原理
sortable.js——Vue 数据更新问题
在一个需求中,我需要实现一个拖拽的功能,其中我使用了 sortable.js 去实现,但我发现我拖拽之后的数据并没有渲染在页面上。
GopalFeng
2020/09/24
4K1
sortable.js——Vue 数据更新问题
vue课程大全
var app=new Vue({el:"#app",data:{msg:"hello vue!"}})
李才哥
2021/02/20
1.6K0
vue课程大全
老司机读书笔记——Vue学习笔记
在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:
老司机Wicky
2018/08/22
3.4K0
老司机读书笔记——Vue学习笔记
vue数组更新界面无变化
1. vue数组更新界面无变化 1.1. 说明 对数组进行更新或者添加,一定要注意方式,我的情况是数组套数组,双重循环,在造数据的时候,不断从尾部添加数据,所以写成了如下形式,每次下拉都会去加载一批相同的数据添加到尾部。初步一看好像没啥问题,实际上我碰到的就是有时候成功有时候数据一点没有显示 this.arrList[this.arrList.length] = {}; this.arrList[this.arrList.length-1].dataList = newArr; this.arrList[t
老梁
2019/09/10
6160
Vue.set与Array.prototype.splice在Vue中的应用
在Vue.js的响应式系统中,数据的变动能够自动反映在视图上,这一特性极大地简化了前端开发的复杂度。然而,当涉及到数组的操作时,开发者常常会遇到一些挑战。特别是,Vue对数组的某些方法进行了包裹,以确保当数组内容变化时,视图能够得到更新。本文将深入探讨Vue.set与Array.prototype.splice这两个在Vue中处理数组响应式问题的重要方法。
Front_Yue
2025/01/13
1192
Vue.set与Array.prototype.splice在Vue中的应用
Vue 全家桶,深入Vue 的世界
可以看到text值的变化是0 5 10 15 … 而并没有出现 0 1 2 3 … 这样连续的变化
FinGet
2019/06/28
2.7K0
Vue 全家桶,深入Vue 的世界
石桥码农:Vue3 与 Vue2 在响应机制的实现上有什么差别?
vue 开发者可能都遇到过这样一个问题:如果模板中数据绑定的是一个数组,我们在 js 代码里面,直接以索引方式改变数组元素的值,有时候视图并不会按照我们的期许更新。下面,我们创建一个代码示例,再现这个场景:
LIYI
2020/02/13
2.2K2
石桥码农:Vue3 与 Vue2 在响应机制的实现上有什么差别?
相关推荐
全面复习vue 教程 api 查漏补缺
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验