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 相关文章推荐
jQuery日历插件datepicker用法详解
Mar 03 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
JS正则子匹配实例分析
Dec 22 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 Javascript
JS实现自定义状态栏动画文字效果示例
Oct 12 Javascript
JavaScript实现短暂提示框功能
Apr 04 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 Javascript
ES6入门教程之Array.from()方法
Mar 23 Javascript
Layui 数据表格批量删除和多条件搜索的实例
Sep 04 Javascript
create-react-app开发常用配置教程
Jun 25 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
php 静态化实现代码
2009/03/20 PHP
php MYSQL 数据备份类
2009/06/19 PHP
php中的动态调用实例分析
2015/01/07 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
前端面试题及答案整理(二)
2016/08/26 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
决策树的python实现方法
2014/11/18 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
python安装requests库的实例代码
2019/06/25 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
七年级数学教学反思
2014/01/22 职场文书
校长寄语大全
2014/04/09 职场文书
销售类求职信
2014/06/13 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
卖房授权委托书样本
2014/10/05 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫