当前位置:首页 > 科技  > 软件

小红书面试:v-for循环,为什么不建议使用index作为key?

来源: 责编: 时间:2024-04-24 17:31:44 294观看
导读Hello,大家好,我是 Sunday。最近有个同学在小红书三面的时候遇到了一个面试题:“v-for循环,为什么不建议使用index作为key?”按说这个问题并不复杂,所以该同学直接回答:“使用 index 作为 key 可能会导致渲染性能问题,特别是

Hello,大家好,我是 Sunday。Cyi28资讯网——每日最新资讯28at.com

最近有个同学在小红书三面的时候遇到了一个面试题:“v-for循环,为什么不建议使用index作为key?”Cyi28资讯网——每日最新资讯28at.com

按说这个问题并不复杂,所以该同学直接回答:“使用 index 作为 key 可能会导致渲染性能问题,特别是数据源使用了 unshift 将数据添加到头部时,会导致 index 被重新规划,从而导致重新渲染。”Cyi28资讯网——每日最新资讯28at.com

然后面试官继续追问:“为什么 index 变化了就会导致 dom 重新渲染?它的渲染机制是什么?”Cyi28资讯网——每日最新资讯28at.com

额... 吃了没有看过源码的亏,导致这个问题并没有回答出来(但愿该同学这次小红书面试可以顺利通过,毕竟都到技术三面了)。Cyi28资讯网——每日最新资讯28at.com

所以,咱们今天就针对这个面试题来说一下。Cyi28资讯网——每日最新资讯28at.com

v-for 循环的渲染时机

在 Vue 的渲染中,有两个比较重要的渲染时机:渲染、更新。Cyi28资讯网——每日最新资讯28at.com

  • 渲染:指的是 DOM 的首次渲染。首次的渲染性能的消耗是固定的。
  • 更新:指的是 数据变化后影响到的视图变化,所谓的性能问题,主要就集中在这里。

我们以这段代码为例,以下代码表示的就是一段 更新 的逻辑:Cyi28资讯网——每日最新资讯28at.com

<template> <div>  <ul>   <li v-for="(item, index) in list" :key="index">{{ item }}</li>  </ul>  <button @click="change">change</button> </div></template><script setup>const list = ref([1, 2, 3])const change = () => { list.value = [3, 2, 1]}</script>

如果我们把 [1, 2, 3] 作为一组 dom,把 [3, 2, 1] 作为另外一组 dom,那么 dom 由 [1, 2, 3] 变成 [3, 2, 1] 的过程就是 DOM 更新。Cyi28资讯网——每日最新资讯28at.com

key 在渲染中的作用

同时,我们需要注意:针对于 v-for 的 dom 更新,一定是:两组 dom 对比发生的变化。Cyi28资讯网——每日最新资讯28at.com

而在 vue 中,一旦两组 dom 对比更新,那么就会触发 diff 算法 的逻辑,而在 diff 中有这样一段 vue 的源代码 isSameVNodeType:Cyi28资讯网——每日最新资讯28at.com

图片图片Cyi28资讯网——每日最新资讯28at.com

这段代码是用来判断 两个 DOM 是否相等的。Cyi28资讯网——每日最新资讯28at.com

它的判断条件有两个:Cyi28资讯网——每日最新资讯28at.com

  1. type:表示当前 dom 的类型,比如:li、div、p 等不同标签名
  2. key:v-for 循环中绑定的 key 值

那么由此我们就可以知道:在 vue 中,通过 type + key 两个属性来判断 dom 是否相等。Cyi28资讯网——每日最新资讯28at.com

如果条件满足(isSameVNodeType 返回 true),那么就不会重新渲染 dom,从而可以 提升性能Cyi28资讯网——每日最新资讯28at.com

index 为什么会影响性能?

根据上面的内容,我们可以知道:在 type 不变的前提下,key 就决定了 dom 是否要重新渲染。Cyi28资讯网——每日最新资讯28at.com

假如,我们使用 index 作为 key,同时使用 unshift 方法为数组添加了一个新的元素,那么所有的 index 都会发生变化,从而导致:isSameVNodeType 返回 false,即:所有的 dom 全部重新渲染 从而影响性能Cyi28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85223-0.html小红书面试:v-for循环,为什么不建议使用index作为key?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 十个每个程序员都应该知道的JavaScript技巧

下一篇: 大白话讲解Rust中令人头痛的“所有权”

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
Top