首页 > 其他分享 >react渲染列表中的key的作用

react渲染列表中的key的作用

时间:2024-08-08 21:39:24浏览次数:13  
标签:dom 渲染 列表 react key vdom

这个key首先是只在渲染数组列表的时候会用到。

比如经常遇到的

 如上

没有key的话,会报一个错,那么,我们可不可以使用数组的index作为下标呢?

答案是不推荐。因为在数组项的顺序在插入、删除或者重新排序等操作中会发生改变,此时把索引作为key可能会产生一些微妙的bug。

像下面这种纯div渲染列表是没有问题的,用index作为key

它的列表item是div,纯渲染

 我们再来看看如果列表是非受控元素的情况,把代码改造下

点击事件会触发组件重新渲染

 

可以看到,列表渲染出问题了,分析一下这种情况。

setState导致render,div的index不变,所以div不会重新生成,input不受state和props的控制,因此元素的状态不变,所以变化的只有受state影响的上面的{item}。

这里其实也揭露了一个问题,那就是当key变化的时候,元素会销毁重建,若key不变,则进行更新。

再用通俗的话来说,react会借助key来判断元素是最新创建的还是移动出来的,从而减少不必要的元素渲染(不必要的diff)。key属性帮助react识别唯一的组件,从而可以更高效地更新和重新渲染,key属性有助于确保组件的唯一性,是组件能够正确被复用。

注意,这里还和虚拟dom扯上关系了,要想真正了解key的作用,必须得理解react的虚拟dom以及diff。

  这里先介绍一下vdom,react组件render产生vdom,然后渲染器把vdom渲染出来。state更新的时候,组件会重新render,产生新的vdom,在浏览器平台下,为了减少dom的创建,react会对两次的render结果做diff,尽量复用dom,提高性能。这就是vdom的来由。

  所以key的真正作用,就是在diff过程中,新旧虚拟dom节点,使用key进行对比,而key是保存在一个map里面,使用映射能够很快的找到哪些节点是复用,哪些节点是删除还是新增,速度非常快。比虚拟dom节点全部对比一遍速度要快的多。这就是key最直观的作用,加快diff的性能。

 

 

 

 

 

 

 

标签:dom,渲染,列表,react,key,vdom
From: https://www.cnblogs.com/yaoyu7/p/18347898

相关文章

  • 轮换挑选图片,补充 es6的对象写法,uniapp使用,class和style,条件渲染,列表渲染,input
    Ⅰ轮换挑选图片【一】方式一<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js2/vue.js"></script></head><body>......
  • react中封装Echarts
    下载npxcreate-react-appmy-echarts创建公共组件importReact,{useState,useEffect,useMemo}from'react';import*asechartsfrom"echarts";constEChartsComponent=({option})=>{const[echartsInstance,setEchartsInstance]=u......
  • 重塑购车体验,实时云渲染赋能东风日产探路云看车新体验
    在科技日新月异的今天,汽车行业正经历着前所未有的深刻变革。随着互联网+、大数据、人工智能等新兴技术的深度融合,汽车营销策略也迎来了从传统展示到数字化体验的跨越。消费者的购车习惯逐渐倾向于线上互动与深度体验,希望在线上获得线下同等的体验,迫使汽车制造商及经销商重新审......
  • openssl验证证书文件pem和key是否匹配
    环境:linux环境下1、从key、pem提取公钥opensslx509-inyour_certificate.pem-noout-pubkey>public_key.txtopensslrsa-inyour_private_key.key-pubout>private_key_pub.txt2、验证diffpublic_key.txtprivate_key_pub.txtdiff命令比较这两个公钥文件。......
  • 在 React 项目中 Editable Table 的实现
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:佳岚可编辑表格在数栈产品中是一种比较常见的表单数据交互方式,一般都支持动态的新增、删除、排序等基础功能。交互分类可编辑表格一般......
  • keycloak~关于社区登录的过程说明
    keycloak将第三方登录(社区登录)进行了封装,大体主要会经历以下三个过程:打开社区认证页面,输入账号密码或者扫码,完成社区上的认证由社区进行302重定向,回到keycloak页面keycloak与社区完成一次oauth2授权码认证,通过社区返回的code来获取token,再通过token来获取社区上的用户信息,在这......
  • key命令操作
    key命令操作查询###查看所有keykeys*###匹配查看*keyssit*###单个字符匹配?keyssit?###可选匹配[]keyssit[e|y]判断KEY类型###随机返回一个KEYrandomkey###判断key是否存在(0|1)existssite#1表示存在0表示不存在###返回KEY的类型typesite......
  • 瑞云渲染动画:首充1元,立得100元渲染劵!
    瑞云渲染影视动画业务上线震撼首充福利!仅需1元,您将立即获得10元的无门槛渲染券,用户只要是第一次充值,即可享受到丰厚的渲染劵,助你动画项目加速起飞。别犹豫,立即加入,开启您的创意之旅。活动时间:长期有效面向人群:瑞云渲染动画用户新用户:注册瑞云动画填【GSZI】再领10元渲染劵!活......
  • react项目中不同宽度断点处理
    当react项目中,你需要通过判断当前屏幕宽度改变,对不同宽度断点进行不同的处理,例如,当屏幕宽度缩小至768px及以下时,需要将某一个属性值改变,或者是当屏幕宽度缩小或者放大到某一宽度时,需要调用某个方法使用window.matchMedia()监听媒体查询importReact,{useEffect}from'react'......
  • ssh 远程登录报错:Unable to negotiate with IP port 22: no matching host key type f
    最近在Mac上想要远程一台Linux服务器,结果不知怎么的就不能使用以前的ssh登录了iot@ios-iMac~%[email protected]:nomatchinghostkeytypefound.Theiroffer:ssh-rsa,ssh-dss ......