前端框架 详解遍历数组为何需要加Key

在大多前端框架中,数组遍历都需要在元素属性上加key,那么key到底有什么用呢?下面将深入解析。

为了解决数组元素更新渲染的性能问题。

如下数组:

let arr="孙悟空","猪八戒","沙和尚"

let arr2="孙悟空","猪八戒","沙和尚","唐僧"

let arr3="唐僧","孙悟空","猪八戒","沙和尚"

将数组在页面中以<li></li>标签包裹,渲染arr到HTML页面。

下面三种情况,发生在arr发生改变,需要更新DOM元素时。

情况一:

此时,li标签没有添加key属性 ,接着在arr最后面 插入"唐僧"元素,使arr的值和arr2的值一样,页面会进行更新渲染,你会发现页面仅更新了<li>唐僧</li>这个标签,这种情况下符合我们的预期,即修改最少的DOM元素。

情况二:

此时,li标签没有添加key属性 ,接着在arr最前面 插入"唐僧"元素,使arr的值和arr3的值一样,页面会进行更新渲染,你会发现页面不仅更新了<li>唐僧</li>这个标签,还连同其他3个<li>标签一起更新了,这种情况是我们不能接受的,因为我们只想更新<li>唐僧</li>这个标签,其他标签保持原状就好。

对于第二种情况,提出解决方案

像React和Vue这些框架,都引入了key属性用于数组遍历。

情况三:

在每个<li>标签中添加key属性 ,key的值为每个元素的id, 这里因为每个元素都不同,可以使用元素名来作为唯一标识key。接着在arr最前面 插入"唐僧"元素,使arr的值和arr3的值一样,页面会进行更新渲染,你会发现页面仅更新了<li>唐僧</li>这个标签,其余标签保持不变,解决了情况二中的问题,达到了我们的预期,修改最少的DOM元素。

总结:

1、从这三种情况,我们不难看出key就是为解决页面数组更新渲染的性能问题而诞生的;

2、key的作用相当于一个ID,只是无法在页面中查看,当设置key以后,在更新渲染比较元素时,就会比较相同key的元素,而不是按照顺序进行比较,在渲染一个列表时,通常给列表每个元素设置一个唯一的key来解决上述问题(这个key在当前列表中唯一即可)

注意:

1、开发中一般会采取数据的id作为key;

2、需要修改列表顺序时,尽量不要使用元素的index作为key:

1)索引会跟着元素顺序变化而变化,所以使用索引作key跟没有key是一样的,唯一的区别就是控制台的警告没了;

2)当元素的顺序不会发生变化时,使用索引做key也没有什么问题。

总结到此!

相关推荐
benbenAItalk10 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_9628857211 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎123411 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易13 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周13 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师14 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing9814 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan14 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡15 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒15 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端