v-for中涉及的key

一、为什么要用key?

  1. key可以标识列表中每个元素的唯一性,方便Vue高效地更新虚拟DOM;
  2. key主要用于dom diff算法,diff算法是同级比较,比较当前标签上的key和标签名,如果都一样,就只移动元素,不会重新创建和删除;
  3. 如果没有key,Vue会使用“就地复用”策略,如果数据项的顺序改变,Vue不会移动DOM元素来匹配数据项的改变,而是简单复用原来位置的每个元素。
<template><div class="about"><ul><li v-for="(item, index) in cityLists"><input type="checkbox" :value="item.city" />{{ item.city }}</li><button @click="remove">删除</button></ul></div>
</template><script>
export default {data() {return {cityLists: [{ id: 1, city: "深圳" },{ id: 2, city: "广州" },{ id: 3, city: "东莞" },],};},methods: {remove() {//注意这里是shift 如果做添加(unshift)也是同样的问题this.cityLists.shift();},},
};
</script>

                                                                                                

如上代码和运行展示,勾选了“深圳”,点击删除的话 ,有key且key不是index的话就可以把“深圳 ”和选中的标识删掉。这里没有正确的设置key,因为标签名都是input,“广州”就直接上去复用了“深圳”的位置,还把人家勾选的标识都复用了。

                                                

选中了“东莞”,点击删除第一个“深圳”,“东莞”的选中标识没了,就是“广州”和“东莞”往上复用了位置。

二、为什么尽量不要使用索引值index作为key?

要是key用index的话运行展示就会和上面的一样,因为index会随着数据的增删而改变,导致key失效。最好使用数据中的唯一标识,如id等,这样当数组发生变化时,就可以根据key来正确地更新和移动对应的元素,而不是重新渲染整个列表。

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

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

相关文章

【从零开始手搓12306项目】第一阶段遇到的问题及解决方案

IDEA中datebase连接mysql失败 读取外包函数报错 注意区分private和public 找不到数据库&#xff1f; 一定要注意数据库的url链接&#xff0c;在datebase的url复制过来 xml和java对应不上&#xff1f; 最好复制一遍到xml文件 git忽略条件文件目录 定义Git全局的 .gitigno…

【XR806开发板试用】 VSCode + Samba环境搭建

概览 考虑到开发环境使用linux&#xff0c;对于我这种初学者还不太习惯使用&#xff0c;而且还需要安装虚拟机。个人感觉挺麻烦的&#xff0c;于是我使用以下方案&#xff0c;达到再Windows下使用开发的目的。 主要思路是&#xff1a;使用WSL(Windows Subsystem for Linux)用来…

:has()伪类使用

下面的 CSS 代码表示如果 <a> 元素里面有 <img> 元素&#xff0c;则这个 <a> 元素就会匹配。 a:has(img) { display: block; } 我们可以使用这个选择器轻松区分是文字链接还是图像链接 a:has(> img) { display: block; } 表示匹配子元素是 <img>…

5.HC-05蓝牙模块

配置蓝牙模块 注意需要将蓝牙模块接5v,实测接3.3v好像不太好使的样子 首先需要把蓝牙模块通过TTL串口模块接到我们的电脑,然后打开我们的串口助手 注意,我们现在是配置蓝牙模块,所以需要进入AT模式,需要按着蓝牙模块上的黑色小按钮再上电,这时候模块上的LED灯以一秒慢闪一次…

基于java+springboot+vue实现的健身俱乐部系统(文末源码+Lw+ppt)23-49

摘 要 随着社会的发展&#xff0c;健身俱乐部的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;健身信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得本健身俱乐部管理信息&#xff0c;因此&#xff0c;设计一种安全高效的健身俱乐部网…

YOLOv8 目标检测项目实操

一 yolov8 背景介绍 YOLOv8是一种尖端的、最先进的(SOTA)模型&#xff0c;建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的特性和改进&#xff0c;以进一步提高性能和灵活性。YOLOv8被设计为快速、准确、易于使用&#xff0c;这使它成为一个很好的选择&#xff0c;…

三相交流电子负载的重要指标

三相交流电子负载是一种模拟实际负载的电子设备&#xff0c;主要用于测试电源、变频器、逆变器等电力电子设备的性能和稳定性。在选择和使用三相交流电子负载时&#xff0c;需要关注以下几个重要指标&#xff1a; 1. 额定功率&#xff1a;三相交流电子负载的额定功率是指其能够…

Adobe发布Acrobat AI助手,PDF互动新体验;OpenAI推出Batch批处理API,支持半价优惠

&#x1f989; AI新闻 &#x1f680; Adobe发布Acrobat AI助手&#xff0c;PDF互动新体验 摘要&#xff1a;Adobe公司近日宣布&#xff0c;继2月推出测试版后&#xff0c;Acrobat AI 助手已在Acrobat Reader、桌面和网页上全面推出。以每月4.99美元的附加订阅形式提供&#x…

PgSQL之WITH Queries/Statement

PostgreSQL WITH 子句 在 PostgreSQL 中&#xff0c;WITH 子句提供了一种编写辅助语句的方法&#xff0c;以便在更大的查询中使用。 WITH 子句有助于将复杂的大型查询分解为更简单的表单&#xff0c;便于阅读。这些语句通常称为通用表表达式&#xff08;Common Table Express…

React + Ts + Vite + Antd 项目搭建

1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式&#xff0c;因为不能自动检测副作用&#xff0c;有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…

函数模板(C++)

目录 一、介绍 二、注意事项 三、排序函数 1、交换函数模板 2、排序算法 3、打印函数 4、测试函数 四、普通函数与函数模板 区别 调用规则 五、模板局限性 六、类模板 类模板与函数模板区别 1、类模板没有自动类型推导使用方式 2、类模板在模板参数列表中可以有默认…

【分享 网络墙测试】检测当前网络是否能用于其他平台,速度检测

文章日期&#xff1a;2024.04.17 类型&#xff1a;软件分享 兼容&#xff1a;win10 / win11 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff09…