DOM 的 diff 算法

经典面试题:

1)react/vue中的 key 有什么作用?(key的内部原理是什么?)
2)为什么遍历列表时,key 最好不用 index?

1、虚拟dom中key的作用:
  • 1) 简单的说:key 是虚拟 DOM 对象的标识,在更新显示时 key 起着极其重要的作用。
  • 2)详细的说:当状态中的数据发生变化时,react 会根据【新数据】生成【新的虚拟DOM】,随后 react 进行【新虚拟DOM】与【旧虚拟DOM】的 diff 比较,比较规则如下:
    • a. 旧虚拟DOM中找到了新虚拟DOM相同的 key:
      (1)若虚拟DOM中内容没表,直接使用之前的真实DOM
      (2)若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM
    • b. 旧虚拟DOM中未找到与新虚拟DOM相同的 key
      (1)根据数据创建新的真实 DOM,随后渲染到页面

2、用 index 作为 key 可能会引发的问题:

  • 1)若对数据进行:逆序添加、逆序删除等破坏顺序操作:会产生没有必要的真实 DOM 更新。===》几面效果没问题,但是效率低。

  • 2)如果结构中还包含输入类的 DOM:会产生错误的 DOM 更新 ===》界面又问题

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

3、开发中如何选择 key?

  • 1)最好使用每条数据的唯一标识作为 key,如:id、手机号、身份证号、学号等唯一值。
  • 2)如果确定只是简单的展示数据,用 index 也是可以的。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python GUI库大汇总

所有程序都是基于命令行的,这些程序可能只有一些“专业”的计算机人士才会使用。例如前面编写的五子棋等程序,恐怕只有程序员自己才愿意玩这么“糟糕”的游戏,很少有最终用户愿意对着黑乎乎的命令行界面敲命令。 相反,如果为程序…

联想小新M7268一体机常用功能和操作步骤

联想小新M7268黑白激光多功能打印一体机,小身材、大智慧,小心M7268身材十分娇小,净尺寸方面为350*275*135mm(长*宽*高)(手工测量),在实际使用时,小新M7268所占空间要略大…

Linux平台建立GB28181设备模拟器

目录 下载模拟器解决动态库缺少问题运行模拟器抓包参考资料 在没有GB28181摄像机的情况下,在Linux虚拟机中模拟出一台GB28181摄像机用于调试和学习. 下载模拟器 到网站下载Linux 平台版本: https://www.happytimesoft.com/download.html tar -zxvf happytime-gb28181-device…

使用 Docker 部署 Halo 博客系统

:::info 项目地址:https://github.com/halo-dev/halo ::: 一、Halo 介绍 1)Halo 简介 Halo 是一款强大易用的开源建站工具,它让你无需太多的技术知识就可以快速搭建一个博客、网站或者内容管理系统。具备可插拔架构、主题套用、富文本编辑器…

基于Springboot的私人健身与教练预约管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的私人健身与教练预约管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三…

某侠网js逆向wasm解析

本次目标地址如下,使用base64解密获得 aHR0cHM6Ly93d3cud2FpbWFveGlhLm5ldC9sb2dpbg 打开网址,本次的目标是登录接口,如下图 本文主要讲解wasm的解析,所以对其他参数不做逆向处理,本次由wasm加密的参数只有sign一个&a…

分布式存储

1 存储基础 1.1 单机存储设备 DAS(直接附加存储,是直接接到计算机打的主板总线上去的存储) UDE、SATA、SCSI、SAS、USB接口的磁盘 所谓的接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储 NAS(网络附加存储…

BLHeli_S 代码分析---BLHeli.asm入口函数pgm_start分析

BLHeli_S 代码分析—BLHeli.asm入口函数pgm_start分析 pgm_start 代码 代码中数据变量定义 Bit_Access: DS 1Flash_Key_1: DS 1 ; Flash key one Flash_Key_2: DS 1 ; Flash key twoAIKON_Boltlite_30A.inc文件中定义的变量 LOCK_BYTE_ADDRESS_16K EQU 3FFFh ; Ad…

苹果最新系统iOS 17的调试和适配方法 - Xcode 14.3.1 真机调试指南

最近苹果发布了iOS 17作为其最新操作系统版本,作为开发者,你可能需要了解如何在Xcode 14.3.1中进行真机调试和适配。本文将为你详细介绍步骤和注意事项。 I. 检查Xcode版本 在开始之前,确保你已经安装了Xcode 14.3.1或更高版本。你可以在Xco…

APP广告变现设置合理的广告频次的原因

过多的广告展示可能会导致用户体验下降,而过少则可能会降低广告收入,我们需要的是找到其中的平衡点。 广告频次限制可以通过多种方式实现,比如限制某段时间内广告出现的次数、限制某个用户在一定时间内看到广告的次数等。在实践中&#xff0…

SpringBoot+SSM项目实战 苍穹外卖(12) Apache POI

继续上一节的内容,本节是苍穹外卖后端开发的最后一节,本节学习Apache POI,完成工作台、数据导出功能。 目录 工作台Apache POI入门案例 导出运营数据Excel报表 工作台 工作台是系统运营的数据看板,并提供快捷操作入口&#xff0c…

【目标检测实验系列】YOLOv5模型改进:融入坐标注意力机制CA,多维度关注数据特征,高效涨点!(内含源代码,超详细改进代码流程)

自我介绍:本人硕士期间全程放养,目前成果:一篇北大核心CSCD录用,两篇中科院三区已见刊,一篇中科院四区在投。如何找创新点,如何放养过程厚积薄发,如何写中英论文,找期刊等等。本人后续会以自己实战经验详细…

免费开源OCR 软件Umi-OCR

Umi-OCR 是一款免费、开源、可批量的离线 OCR 软件,基于 PaddleOCR,适用于 Windows10/11 平台 免费:本项目所有代码开源,完全免费。方便:解压即用,离线运行,无需网络。高效:自带高效…

07 整合SSM的快速理解

1.1 第一问:SSM整合需要几个IoC容器? 两个容器 本质上说,整合就是将三层架构和框架核心API组件交给SpringIoC容器管理! 一个容器可能就够了,但是我们常见的操作是创建两个IoC容器(web容器和root容器&…

C++ 设计模式之桥接模式

【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【简介】什么是桥接模式 桥接模式(Bridge Pattern)是⼀种结构型设计模式,它的U…

不是人才用不起,而是AI巡检更有性价比!

在许多行业中,如煤炭、电力、化工等,安全生产是至关重要的。这就需要通过巡检,对设备运行状态进行实时监测,及时发现并处理潜在的安全隐患,从而降低事故发生的概率。但是传统的巡检方式通常依赖于人工进行,…

Java项目:121SSM记账管理系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 记账管理系统基于SpringSpringMVCMybatis开发,系统主要功能如下: 收入项管理 支出项管理 收入方式管理 支出方式管理 添加收入…

申泰勇教练的独家人物化身系列即将登陆 The Sandbox

申泰勇(Shin Tae-yong)教练是足球界的传奇人物,他来到 The Sandbox,推出了自己的专属人物化身系列。作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练,他的传奇经历现在已经影响到了虚拟世界。 向过去、现在和未…

Linux第29步_安装“Notepad++”软件

STM32CubeProgrammer脚本文件的后缀为“.tsv”,ST公司官方也叫做FlashLayout。在烧写“TF-A固件”之前,我们需要用“Notepad”软件打开“后缀为.tsv”的脚本文件,根据需求决定哪些文件需要更新,设置好这个脚本文件。 在后期使用S…

AnyText多语言文字生成与编辑

AnyText图文融合 近年来,随着AIGC的爆火,图片生成技术得到飞速发展,当前AI生成的图片已达到真假难辨的高保真度。不过,当合成图片中出现文字内容时,仍能够使AI露出马脚,因为当前主流方法尚无法在图片中生成…