Vue.set() this.$set()引发的视图更新思考及注意事项


Posted in Javascript onAugust 30, 2018

引文

vue文档列表渲染中有条注意事项:

Vue.set() this.$set()引发的视图更新思考及注意事项

这里提到的两种情况实际改变了数据但是没有触发视图更新。

由此引出Vue.set(),先上文档API:

 

this.$set()Vue.set()本质方法一样,前者可以用在methods中使用。

set方法调用时,可以触发页面全部重新渲染。

比如在vue中有个data数组arr:

//arr=[1,2,3]
  arr[1]='b'
  console.log(arr) // [1,2,3]
  Vue.set(arr,2,'c')
  console.log(arr) // [1,b,c]

可以看出set触发了整个页面的重新渲染,连arr[1]='b'的效果也被重新渲染了。

使用set添加数据

Vue.set()不光能修改数据,还能添加数据,弥补了Vue数组变异方法的不足。

可以使用set添加数据这一特性,解决一些常见问题。

例如循环出的元素点击应用选中样式,再点击取消选中样式。

<section v-for="item in list">
  <div :class="['xxclass',item.checked?'checked':'']"></div>
</section>
<!--这里通过判断item的**本身不存在的checked属性**来决定是否增加checked样式类-->

点击方法如下:

clickHandle: function(item){
  if(typeof item.checked === 'undefined'){
   this.$set(item, 'checked', true)
  } else {
   item.checked = !item.checked
  }
}
// 如果item没有checked属性就用set方法添加,有则取反

这就利用set使用了对象中本身不存在的checked属性来实现想要的功能。

深入响应式原理

至于视图更新时机可以看文档深入响应式原理

总结

以上所述是小编给大家介绍的Vue.set() this.$set()引发的视图更新思考及注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js的逻辑运算符 ||
May 31 Javascript
JavaScript中的isXX系列是否继续使用的分析
Apr 16 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
jQuery+jRange实现滑动选取数值范围特效
Mar 14 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
Feb 28 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
vue组件通信传值操作示例
Jan 08 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
通过实例解析vuejs如何实现调试代码
Jul 16 Javascript
在Vuex中Mutations修改状态操作
Jul 24 Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 #Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 #Javascript
vue-router动态设置页面title的实例讲解
Aug 30 #Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 #Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 #Javascript
vue中rem的配置的方法示例
Aug 30 #Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 #Javascript
You might like
PHP实现读取一个1G的文件大小
2013/08/24 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
js时间控件只显示年月
2017/01/08 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
基于jQuery的表单填充实例
2017/08/22 jQuery
浅谈Node Inspector 代理实现
2017/10/19 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
js html实现计算器功能
2018/11/13 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
python 中random模块的常用方法总结
2017/07/08 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
个人评价范文分享
2014/01/11 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
股票投资建议书
2014/05/19 职场文书
小学教师年度个人总结
2015/02/05 职场文书
股东大会通知
2015/04/24 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
vue+spring boot实现校验码功能
2021/05/27 Vue.js
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js