vue key的原理和作用

news/2024/9/20 13:39:37/ 标签: vue.js, javascript, 前端

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?

                最好使用每条数据的唯一标识作为key

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


http://www.ppmy.cn/news/1453440.html

相关文章

【Linux】`nohup`命令详解:让你的任务在后台持续运行

我把我唱给你听 把你纯真无邪的笑容给我吧 我们应该有快乐的 幸福的晴朗的时光 我把我唱给你听 用我炙热的感情感动你好吗 岁月是值得怀念的留恋的 害羞的红色脸庞 谁能够代替你呀 趁年轻尽情的爱吧 最最亲爱的人啊 路途遥远我们在一起吧 🎵 叶…

Elementplus远程搜索下拉

远程搜索 :remote-method“getAppNumberList” <div class"filter-item"><span>型号:</span><el-select v-model"listQuery.numberId" clearable filterable :remote-method"getAppNumberList" remote placeholder"请…

Spring Security Oauth2 JWT 添加额外信息

目录 一、问题描述 二、实现步骤 1、自定义TokenEnhancer 2、配置授权服务器 3、自定义UserDetails的User类 三、参考文档 一、问题描述 Oauth2里默认生成的JWT信息并没有用户信息&#xff0c;在认证授权后一般会返回这一部分信息&#xff0c;我对此进行了改造。 Oauth…

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像&#xff0c;有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

FLIR LEPTON3.5 热像仪wifi 科研实验测温采集仪

点击查看详情!点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情 1、描述 这是一款桌面科研实验测温热成像多功能热像记录仪&#xff0c;小巧轻便…

.2700勒索病毒,网络安全面临的新威胁

一、.2700勒索病毒的定义与危害 .2700勒索病毒是一种通过锁定被感染者计算机系统或文件&#xff0c;并施以敲诈勒索的新型计算机病毒。它通过计算机漏洞、邮件投递、恶意木马程序、网页后门等方式进行传播。一旦感染&#xff0c;磁盘上几乎所有格式的文件都会被加密&#xff0c…

CPU、GPU、内存、硬盘

内存与硬盘&#xff08;存储&#xff09; 内存 内存&#xff08;Memory&#xff09;&#xff0c;也叫随机访问存储器&#xff08;Random Access Memory&#xff0c;RAM&#xff09;&#xff0c;是计算机中的一种临时数据存储器件。它可以被计算机的中央处理器&#xff08;CPU…

java 双亲委派机制

1、类加载器的种类 BootstrapClassLoader&#xff1a;启动类类加载器&#xff0c;由c编写&#xff0c;加载java核心库 java.*&#xff0c;构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节&#xff0c;开发者无法直接获取到启动类加载器的引用&…

OpenAI实验室创立的故事

OpenAI实验室创立的故事 前言 随着ChatGPT大模型的爆火&#xff0c;打造ChatGPT的公司OpenAI也成了最知名的人工智能公司。大家都知道OpenAI&#xff0c;但不一定知道OpenAI一开始是一个非营利性实验室&#xff0c;也不一定知道OpenAI是在什么背景下创立的。 OpenAI创立于20…

u-boot引导加载程序的命令列表

2024年5月4日&#xff0c;周六下午 这是u-boot引导加载程序的命令列表&#xff0c;提供了各种功能来配置系统、加载内核和文件系统、进行网络引导等操作。下面是每个命令的简要说明&#xff1a; ?: 显示命令帮助信息的别名。base: 打印或设置地址偏移量。bdinfo: 打印板信息结…

Vue单页面应用和多页面应用的区别

概念&#xff1a; SPA单页面应用&#xff08;SinglePage Web Application&#xff09;&#xff0c;指只有一个主页面的应用&#xff0c;一开始只需要加载一次js、css等相关资源。所有内容都包含在主页面&#xff0c;对每一个功能模块组件化。单页应用跳转&#xff0c;就是切换…

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX&#xff0c;创建连接&#xff0c;点击NEW SUBSCRIPTION,创建一个主题&#xff0c;这里使用test/topic,在下面Json中填写…

Leetcode—422. 有效的单词方块【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—422. 有效的单词方块 实现代码 class Solution { public:bool validWordSquare(vector<string>& words) {int row words.size();for(int i 0; i < row; i) {// 当前这一行的列数int col words[i].length(…

3.SpringSecurity基本原理

SpringSecurity本质是一个过滤器链。十多个过滤器构成一个过滤器链。 这些过滤器在项目启动就会进行加载。每个过滤器执行放行操作才会执行下一个过滤器。 常见过滤器 FilterSecurityInterceptor 是一个方法级的权限过滤器&#xff0c;基本位于过滤器链的最底部。 Excepti…

ubuntu22.04 cmake 配置mysql

报错信息&#xff1a; CMake Error at CMakeLists.txt:33 (find_package): By not providing “FindMySQL.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “MySQL”, but CMake did not find one. Could not…

力扣每日一题106:从中序与后序遍历序列构造二叉树

题目 中等 相关标签 相关企业 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], postorder …

漏洞挖掘之某厂商OAuth2.0认证缺陷

0x00 前言 文章中的项目地址统一修改为: a.test.com 保护厂商也保护自己 0x01 OAuth2.0 经常出现的地方 1&#xff1a;网站登录处 2&#xff1a;社交帐号绑定处 0x02 某厂商绑定微博请求包 0x02.1 请求包1&#xff1a; Request: GET https://www.a.test.com/users/auth/weibo?…

Java学习-练习试用Java实现求素数

以下是使用Java语言试着编写的求1-100内的素数的程序&#xff1a; public class PrimeNumbers {public static void main(String[] args) {System.out.println("Prime numbers between 1 and 100 are:");for (int i 2; i < 100; i) {if (isPrime(i)) {System.ou…

JSON.stringify()和JSON.parse()

JSON.stringify() JSON.stringify() 是 JavaScript 中的一个内置方法&#xff0c;用于将一个 JavaScript 值&#xff08;对象或值&#xff09;转换为一个 JSON 字符串。这个方法对于在客户端和服务器之间传输数据特别有用&#xff0c;因为 JSON 是一种轻量级的数据交换格式&am…

R语言之如何安装R和RStudio软件

目录 简介下载R安装包安装R软件安装RStudio软件总结 简介 R软件是一种用于统计计算和数据分析的编程语言&#xff0c;它提供了丰富的函数和包来处理和分析各种数据集。R具有广泛的应用领域&#xff0c;包括统计学、生物信息学、金融学等。它是一个开源&#xff0c;免费的软件。…