13. Vue v-for指令的使用方式以及使用key解决组件问题

Vue指令之v-forkey属性

  1. 迭代数组
<ul><li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name}} --- 年龄:{{item.age}}</li>
</ul>
  1. 迭代对象中的属性
<!-- 循环遍历对象身上的属性 -->
<div v-for="(val, key, i) in userInfo">{{val}} --- {{key}} --- {{i}}</div>
  1. 迭代数字
<p v-for="i in 10">这是第 {{i}} 个P标签</p>

2.2.0+ 的版本里,当在组件中使用 v-for 时,key 现在是必须的。

当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。

示例1:迭代数组

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>Title</title></head>
<body><div id="app"><ul><li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name}} --- 年龄:{{item.age}}</li></ul></div><!--  1.导入vue.js库  --><script src="lib/vue.js"></script><script>// 2. 创建一个Vue的实例var vm = new Vue({el: '#app',data: {list: [{ "name":"张一", "age": 31},{ "name":"张二", "age": 21},{ "name":"张三", "age": 41},{ "name":"张四", "age": 51},{ "name":"张五", "age": 61},],},methods:{}})</script></body>
</html>

浏览器显示如下:

13423234-4efd6c0781cc1b8e.png

示例2:迭代对象中的属性

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>Title</title></head>
<body><div id="app"><!-- 循环遍历对象身上的属性 --><div v-for="(val, key, i) in userInfo">value值:{{val}} --- key值:{{key}} --- 索引:{{i}}</div></div><!--  1.导入vue.js库  --><script src="lib/vue.js"></script><script>// 2. 创建一个Vue的实例var vm = new Vue({el: '#app',data: {userInfo: {userid: 1,username: "张三",age: 30}},methods:{}})</script></body>
</html>

浏览器显示如下:

13423234-804d910dba82a150.png

示例3: 迭代数字

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>Title</title></head>
<body><div id="app"><p v-for="i in 15">这是第 {{i}} 个P标签</p></div><!--  1.导入vue.js库  --><script src="lib/vue.js"></script><script>// 2. 创建一个Vue的实例var vm = new Vue({el: '#app',data: {},methods:{}})</script></body>
</html>

浏览器显示如下:

13423234-86cca921316d44b1.png

v-for中使用key的注意事项

2.2.0+ 的版本里,当在组件中使用 v-for 时,key 现在是必须的,因为没有key来保障循环中的唯一性,那么组件则会被打乱。

下面来看一个例子,明确当不用key的时候会出现什么样的问题。

不用key的问题示例

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>Title</title></head>
<body><div id="app"><div><label>Id:<input type="text" v-model="id"></label><label>Name:<input type="text" v-model="name"></label><input type="button" value="添加" @click="add"></div><p v-for="item in list" ><input type="checkbox">{{item.id}} --- {{item.name}}</p></div><!--  1.导入vue.js库  --><script src="lib/vue.js"></script><script>// 2. 创建一个Vue的实例var vm = new Vue({el: '#app',data: {id: '',name: '',list: [{ id: 1, name: '李斯' },{ id: 2, name: '嬴政' },{ id: 3, name: '赵高' },{ id: 4, name: '韩非' },{ id: 5, name: '荀子' }]},methods:{add(){// 添加新的数据到队列最后this.list.push({ id: this.id, name: this.name })}}})</script></body>
</html>

浏览器显示如下:

13423234-be53a337c17938ee.png
13423234-e5792f04494bf635.png

可以从上面的示例中看到,当添加数据到最后的情况下,原来勾选的5 --- 荀子并没有影响到顺序。

下面看看,如果将数据插入到前面会怎么样?

使用unshift() 方法,将数据添加到队列的最前面,如下:

13423234-a4c31bc34dce7dec.png

那么,再来执行一下上面的示例,如下:

13423234-c6a3bc233944d2af.png
13423234-75ea7f16153649b4.png
        <p v-for="item in list" ><input type="checkbox">{{item.id}} --- {{item.name}}</p>

那么这时候就要给上面的组件设置一个key,并且绑定一个string/number类型的数据来保障循环数据的唯一性。

这样才能保障渲染。

使用v-bind设置key的值,保障渲染的数据顺序

13423234-a8f249b9675159d4.png
        <!-- 注意: v-for 循环的时候,key 属性只能使用 number获取string --><!-- 注意: key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值 --><!-- 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 --><p v-for="item in list" :key="item.id"><input type="checkbox">{{item.id}} --- {{item.name}}</p>

再次执行一下刚才错误的过程,如下:

13423234-eef09bfaad859422.png
13423234-e0cd06ce51236dc9.png
13423234-0e3934319aa622f6.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25919.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达观数据:Selenium使用技巧与机器人流程自动化实战

背景 北京时间晚上十一点&#xff0c;突然电脑右下角的QQ弹出了一条消息&#xff0c;"在&#xff1f;" 都9012年了还会有人单独发个"在"然后人就失踪了&#xff1f;有事情找就直接说事情嘛&#xff0c;你不说事情&#xff0c;我怎么知道我应该"在&quo…

Vue v-for使用详解

Vue指令之v-for和key属性 1.迭代数组 <ul><li v-for"(item, i) in list">索引&#xff1a;{{i}} --- 姓名&#xff1a;{{item.name}} --- 年龄&#xff1a;{{item.age}}</li> </ul>2.迭代对象中的属性 <!-- 循环遍历对象身上的属性 --&…

Android CheckedTextView 使用+实例

CheckedTextView是什么 CheckedTextView继承自TextView且实现了Checkable接口&#xff0c;对TextView界面和显示进行了扩展的控件&#xff0c;支持Checkable。可以实现单选或多选功能&#xff0c;在你懒得使用两者结合的时候&#xff0c;这就是不二选择。 主要XML属性 android…

Android CheckedTextView 使用+实例,kotlin静态编译

第一次点击无效 android:focusableInTouchMode=“true”,这个属性加上会导致第一次点击触发不了选择事件。 实例 – 官方文档指出,结合ListView使用更佳,咱下面通过一个栗子了解一下,下面是效果图: 1.主界面CheckedTextViewActivity.java public class CheckedTextVi…

Android CheckedTextView 使用+实例,android快速开发平台

第一次点击无效 android:focusableInTouchMode=“true”,这个属性加上会导致第一次点击触发不了选择事件。 实例 – 官方文档指出,结合ListView使用更佳,咱下面通过一个栗子了解一下,下面是效果图: 1.主界面CheckedTextViewActivity.java public class CheckedTextVi…

Vue3使用canvas根据递归类型数据绘制继承树

一、声明变量 //返回值&#xff1a;1&#xff0c;绘图x的最小值和最大值&#xff0c;绘图y的最小值和最大值//计算改变canvas 画布的宽高&#xff0c;重新改变起始X坐标&#xff0c;起始Y坐标let flowData [{"name": "女娲","projectTreeVOList&quo…

如何正确使用ChatGPT?英国大学对AI使用要求汇总

不同于ChatGPT刚变火爆起来的时候的警惕与排斥&#xff0c;许多大学似乎已经选择了与这些新兴的AI技术“和平共处”。 他们不仅对这些技术进行了相关研究&#xff0c;还将ChatGPT融入课程&#xff0c;甚至允许学生们在作业中使用它们。 但“和平共处”也并不意味学生可以抛弃…

考研英语阅读技巧总结(唐迟)

正文 做题顺序&#xff1a;看一段做一题 总结更多的是为了找共性&#xff1a; 1.文章疑问句后的回答是文章的中心。 1&#xff09;因为疑问句为了引起读者注意&#xff0c;而需要读者注意的往往是文章想要强调的观点。【2015 T2 第一句】 2&#xff09;疑问句同样可以表示…

四川大学图书情报档案专业考研初试介绍和经验(2023.1.02已更新)

文章目录 川大图情基本情况2023年招生情况近5年录取数据复试2021-2022年复试线学硕复试线图情专硕复试线 2021-2022年复试录取分数2022年学硕部分拟录取人员详细分数(不含调剂) 专业课备考专业课资料辅导资料&#xff08;可选&#xff09;667科目备考参考策略972科目备考方法参…

ChatGPT评未来考研最好就业的十大专业。你的上榜了吗?

各位考研人大家好&#xff0c;作为考研人&#xff0c;考研的目的无非就是想继续深造&#xff0c;然后有好的就业&#xff0c;而对于好的就业专业&#xff0c;ChatGPT评出未来考研最好就业的十大专业&#xff0c;给大家参考&#xff0c;看有你本专业吗&#xff1f; 01 人工智能与…

AI大语言模型创业路上的赢家与输家

这是一篇来自于Sam Hogan的博文译文&#xff1a; 随着像Jasper这样的公司开始放缓脚步&#xff0c;为经历数年低迷的风险投资创业生态带来一波复兴的预期似乎难以实现。目前明确的赢家不多&#xff0c;失败者也就那么几家&#xff0c;还有一小部分前景看好的公司充满不确定性。…

领略未来无需远方,华为全屋智能将在AWE描绘智慧生活新图景

作者 | 曾响铃 文 | 响铃说 4月27日-30日&#xff0c;AWE 2023中国家电及消费电子博览会将在上海新国际博览中心举行&#xff0c;这是AWE展沉淀两年后的再次回归。 作为家电及消费电子领域TOP3的国际盛会&#xff0c;本届AWE以“智科技&#xff0c;创未来”为主题&#xff0…

艾瑞报告:预计2023年家用智能照明市场规模过百亿,Yeelight易来引领行业发展

照明是家居的主要部分&#xff0c;以智能化控制技术光环境设计为核心的智能照明成为智能家居重要的子系统与子应用&#xff0c;智能照明通过精准的设计&#xff0c;将单品链接成系统&#xff0c;通过算法和云平台实现智能化&#xff0c;针对不同的空间适配不同的灯光&#xff0…

【周末闲谈】文心一言,模仿还是超越?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 周末闲谈 ✨第一周 二进制VS三进制 文章目录 周末闲谈前言一、背景环境二、文心一言&#xff1f;(_)?三、文心一言的优势&#xff1f;&#x1f617;&#x1f617;&#x1f617;四、文心…

文心一言和讯飞星火全面对比测试:(五)编程能力

相关文章&#xff1a; 实战 | 用ChatGPT处理word表格数据&#xff1a;直接采用ChatGPt和利用ChatGPT编写python脚本两种方法 「文心一言」 vs ChatGPT&#xff0c;结果没有你想向中的那么不堪 文心一言和讯飞星火全面对比测试&#xff1a;&#xff08;一&#xff09;语言理解…

文心一言 vs GPT-4实测!百度背水一战交卷

GPT-4发布一天之后&#xff0c;压力全部给到百度这边。 就在刚刚&#xff0c;百度交卷。 文心一言&#xff0c;百度全新一代知识增强大语言模型&#xff0c;正式在百度总部“挥手点江山”会议室里发布。 在一片静寂的氛围里&#xff0c;李彦宏小步登场&#xff0c;语气里带着点…

快捷工具箱小程序-做你的小树洞

今天闲来无事&#xff0c;发现了一个有趣的小程序-做你的小树洞&#xff0c;包含ChatGpt小机器人 小程序总体界面是这样的 这个小程序里边有很多有趣的小功能&#xff0c;最让我喜欢的就是藏头诗的创作。仅仅需要输入关键词语&#xff0c;然后就能够进行创作诗句&#xff0c;他…

藏头诗生成器

一个藏头诗生成器的小程序&#xff0c;自定义文字即可生成一首诗词。 该小程序通过机器学习&#xff0c;预训练8万多首诗词&#xff0c;5千多个韵词&#xff0c;能通过关键词生成押韵的藏头诗&#xff0c;也可以生成藏字诗&#xff1b; 在生成结果页面&#xff0c;可选择复制…

ChatGPT + MindShow 三分钟搞定PPT制作

制作一份“通用性”的PPT需要几步&#xff1f; 三步 接下来&#xff0c;我们借助ChatGPT和MindShow&#xff0c;大概三分钟完成操作&#xff0c;就能制作出来完胜大部分人的PPT文件。具体可看文末效果导示。 解锁更多AIGC&#xff08;ChatGPT、AI绘画&#xff09;玩法&#…

狼人杀凉了,贴着AI标签的剧本杀如何构建自己的商业版图

文 | 魏启扬 来源 | 智能相对论&#xff08;ID&#xff1a;aixdlun&#xff09; “天黑请闭眼”。 这是“狼人杀”的开场台词&#xff0c;也可用来形容“狼人杀”的现状——前景黑暗&#xff0c;惨不忍睹。 2017年&#xff0c;“狼人杀”的热度达到顶点&#xff0c;无论是线下…