当前位置: 首页 > news >正文

vue中列表渲染

列表渲染

  • 实际开发中,使用每条数据的唯一标识作为key,也就是对于数组列表,对象中的属性如:id、手机号、身份证号、学号等唯一值,对象列表同理

  • 只要不对列表的逆序添加,逆序删除等破坏顺序的操作,仅用于渲染和展示。使用index作为key是没有问题的。

  • <body><ul>//:key是对象数组的身份证,对数组中的每个对象进行遍历<li v-for="p in persons" :key="p.id">{{name}}--{{age}}</li><li v-for="(p,index)" :key="index" >{{name}} -----{{age}}</li>//对象遍历<li v-for="(value,k) of  car" :key="k" >{{k}} -----{{value}}</li></ul>
    </body>
    <script>const vm = new Vue({el:'#root',data: {//数组列表persons:[{id: 001,name: 'marry',age:12},{id: 002,name: 'axios',age:11},{id: 003,name: 'ajax',age:15}],//对象列表car: {name: '大众',price: '1222',color: 'black'}}})
    </script>

  • key的底层原理

  • 遍历列表时,vue将初始数据转成虚拟DOM(页面),vue会给虚拟DOM添加key值,之后虚拟DOM转成真实DOM放入页面。

    如果用户修改了页面信息,vue根据新的数据生成新的虚拟DOM,新的虚拟DOM与虚拟DOM的数据对比

  • 使用index作为key的问题

  • 用:key="index"对原本的数组索引的顺序,造成了破坏。也就是新的虚拟DOM与虚拟DOM的对象,在索引位置为0的位置属性值不一致,就会实现,新的虚拟DOM与虚拟DOM的对象属性相同的部分,直接用虚拟DOM的对象属性。不相同的部分,用新的虚拟DOM对象属性。缺点一:产生新的DOM更新,效率低。缺点二:对象属性使用输入类的DOM,会产生错误

  • 如果新的虚拟DOM与虚拟DOM的对象索引号匹配不上,则创建新的真实DOM,渲染到页面上。

  • <body><ul><!--once为点击一次就失效,--><button @click.once="add">点我添加一个对象到数组中</button><li v-for="(p,index)" :key="index" >{{name}} -----{{age}}<!--加入文本框--><input type="text"> </li></ul>
    </body>
    <script>const vm = new Vue({el:'#root',data: {//数组属性persons:[{id: 001,name: 'marry',age:12},{id: 002,name: 'axios',age:11},{id: 003,name: 'ajax',age:15}]},methods: {add(){const p = {id: 004,name:'lala', age: 20}//push方法是往数组属性索引为0的位置添加一组对象this.person.push(p);}}})
    </script>
  • 使用index作为key的思维图

相关文章:

  • 【OpenAI】经营权争夺战关系图
  • 服务器中了elbie勒索病毒解决办法,elbie勒索病毒解密数据恢复
  • Java开源ETL工具-Kettle
  • 一张图,了解美格智能高算力AI模组
  • 哈夫曼树你需要了解一下
  • C语言获取命令行选项(option/flag)和输入的内容的一种巧妙的办法
  • Rockchip平台rk3588源码下载编译(基于Android13)
  • 【搭环境】装Python3.8 open3d
  • 网络运维与网络安全 学习笔记2023.11.23
  • thingsboard3.6的mailConfigTemplateController错误
  • chatglm3部署使用
  • 网络运维与网络安全 学习笔记2023.11.22
  • 使用websocket获取thingsboard设备的实时数据
  • 贪心:leetcode2216 美化数组的最少删除数
  • Pickcode:教孩子们编码的新视觉语言
  • angular2开源库收集
  • angular学习第一篇-----环境搭建
  • C# 免费离线人脸识别 2.0 Demo
  • HomeBrew常规使用教程
  • js算法-归并排序(merge_sort)
  • PHP 7 修改了什么呢 -- 2
  • php中curl和soap方式请求服务超时问题
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 关于使用markdown的方法(引自CSDN教程)
  • 记一次删除Git记录中的大文件的过程
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端攻城师
  • 问题之ssh中Host key verification failed的解决
  • 我的业余项目总结
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • MPAndroidChart 教程:Y轴 YAxis
  • PostgreSQL之连接数修改
  • scrapy中间件源码分析及常用中间件大全
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ${ }的特别功能
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第二周)效能测试
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)鸿鹄云架构一服务注册中心
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • .gitignore文件设置了忽略但不生效
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .sh
  • @SuppressWarnings注解
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [Android] Implementation vs API dependency
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [BSGS算法]纯水斐波那契数列
  • [C++]:for循环for(int num : nums)