详解Vue的列表渲染


Posted in Vue.js onNovember 20, 2021

1. v-for:遍历数组内容(常用)

in 也可以用 of 代替

<body>
	<div id="div1">
		<li v-for='(p,i) in persons' :key=i>
			{{p.name}}--{{p.age}}
			<!-- 张--18
				 李--19
				 刘--17 -->
		</li>
	</div>
</body>
<script type="text/javascript">
	Vue.config.produnctionTps=false
 	new Vue({
		el:"#div1",
		data:{
			persons:[
				{id:'001',name:"张",age:18},
				{id:'002',name:"李",age:19},
				{id:'002',name:"刘",age:17},
			]
		}
	})
</script>

2. v-for:遍历对象属性(常用)

<body>
	<div id="div1">
		<li v-for='(p,k) in persons' :key=k>
			{{p}}--{{i}}
			<!-- 张--name
				 18--age -->
		</li>
	</div>
</body>
<script type="text/javascript">
	Vue.config.produnctionTps=false
 	new Vue({
		el:"#div1",
		data:{
			persons:{
				name:"张",
				age:18
			}
		}
	})

3.遍历字符串(不常用)

<body>
	<div id="div1">
		<li v-for='(p,i) in str' :key=i>
			{{p}}--{{i}}
			<!-- a--0 
				 b--1
				 c--2
				 d--3
				 e--4 -->
		</li>
	</div>
</body>
<script type="text/javascript">
	Vue.config.produnctionTps=false
 	new Vue({
		el:"#div1",
		data:{
			str:"abcde"
		}
	})
</script>

4.遍历指定次数(不常用)

<body>
	<div id="div1">
		<li v-for='(p,i) in 5' :key=i>
			{{p}}--{{i}}
			<!-- 1--0
				 2--1
				 3--2
				 4--3
				 5--4 -->
		</li>
	</div>
</body>

5.key 的作用和原理

在上面都用的index 作为key,但是在破坏顺序修改dom以及有input内容就会出错。仅在用于渲染页面而不需要修改页面时可用index作为key.

强烈建议用数据的唯一标识,如id、手机号、邮箱号作为key

1.虚拟DOM中key的作用:

key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据[新数据]生成[新的虚拟DOM] ,随后Vue进行[新?拟DOM]与[旧?拟DOM]的差异比较,比较规则如下:

2.对比规则:

(1).旧虚拟DOM中找到了与新虚拟DOM相同的key:

①.若?拟DOM中内容没变, 直接使用之前的真实DOM!

②.若?拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM。

(2).旧虚拟DOM中未找到与新虚拟DOM相同的key创建新的真实DOM,随后渲染到到页面。

3.用index作为key可能会引发的问题:

1.若对数据进行:逆序添加、逆序删除等破坏顺序操作:

会产生没有必要的真实DOM更新==>界面效果没问题,但效率低。

2.如果结构中还包含输入类的DOM:

会产生错误DOM更新==> 界面有问题。

4.开发中如何选择key?

1.最好使用每条数据的唯一标识作 为key,比如id、 手机号、身份证号、学号等唯一值。

2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Vue.js 相关文章推荐
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
Vue——前端生成二维码的示例
Dec 19 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
Vue如何清空对象
Mar 03 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
vue封装数字翻牌器
Apr 20 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
详解Vue slot插槽
Nov 20 #Vue.js
详解Vue router路由
Nov 20 #Vue.js
vue中 this.$set的使用详解
如何用vue实现网页截图你知道吗
Vue3中的Refs和Ref详情
Nov 11 #Vue.js
详细聊聊vue中组件的props属性
一定要知道的 25 个 Vue 技巧
You might like
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
php bootstrap实现简单登录
2016/03/08 PHP
js查找父节点的简单方法
2008/06/28 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
javascript截取字符串小结
2015/04/28 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
Numpy掩码式数组详解
2018/04/17 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
python实现飞机大战小游戏
2019/11/08 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
钳工实习自我鉴定
2013/09/19 职场文书
2014年国培研修感言
2014/03/09 职场文书
工会趣味活动方案
2014/08/18 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
青年教师个人总结
2015/02/11 职场文书
丧事答谢词大全
2015/09/30 职场文书
护理心得体会范文
2016/01/22 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL