react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key props),而是给react自己用的。

简单来说,react利用key来识别组件,它是一种身份标识标识,就像我们的身份证用来辨识一个人一样。每个key对应一个组件,

相同的key react认为是同一个组件,这样后续相同的key对应组件都不会被创建。例如下面代码:

this.state = {users: [{id:1,name: '张三'}, {id:2, name: '李四'}, {id: 2, name: "王五"}], } render() return( <div> <h3>用户列表</h3> {this.state.users.map(u => <div key={u.id}>{u.id}:{u.name}</div>)} </div> ) );

上面代码在dom渲染挂载后,用户列表只有张三李四两个用户,王五并没有展示处理,主要是因为react根据key认为李四王五是同一个组件,导致第一个被渲染,后续的会被丢弃掉。

index作为key是一种反模式

在list数组中,用key来标识数组创建子组件时,若数组的内容只是作为纯展示,而不涉及到数组的动态变更,其实是可以使用index作为key的。

但是,若涉及到数组的动态变更,例如数组新增元素、删除元素或者重新排序等,这时index作为key会导致展示错误的数据。本文开始引入的例子就是最好的证明。

{this.state.data.map((v,idx)=><Item key={idx} v={v} />)}
// 开始时:['a','b','c']=>
<ul><li key="0">a <input type="text"/></li><li key="1">b <input type="text"/></li><li key="2">c <input type="text"/></li>
</ul>// 数组重排 -> ['c','b','a'] =>
<ul><li key="0">c <input type="text"/></li><li key="1">b <input type="text"/></li><li key="2">a <input type="text"/></li>
</ul>

key的值要稳定唯一

在数组中生成的每项都要有key属性,并且key的值是一个永久且唯一的值,即稳定唯一。

在理想情况下,在循环一个对象数组时,数组的每一项都会有用于区分其他项的一个键值,相当数据库中主键。这样就可以用该属性值作为key值。但是一般情况下可能是没有这个属性值的,这时就需要我们自己保证。

但是,需要指出的一点是,我们在保证数组每项的唯一的标识时,还需要保证其值的稳定性,不能经常改变

var localCounter = 1;
this.data.forEach(el=>{ el.id = localCounter++; }); //向数组中动态添加元素时, function createUser(user) { return { ...user, id: localCounter++ } }

转载于:https://www.cnblogs.com/wanDPS/p/10491763.html

react key的作用相关推荐

  1. react中key的作用

    背景: 如果为父节点添加多个相同的子节点时,不添加key属性,会报错但同时也会渲染出dom,渲染出dom其实是证明能从差异对象中渲染出真实dom,但报错的原因是因为这种写法会影响渲染的性能,不利于生层 ...

  2. vue列表渲染中key的作用_vue中:key的作用

    因为不理解 :key(v-bind:key),网上查了一些的资料,这篇写得非常不错,很简洁清楚. 其实不只是vue,react中在执行列表渲染时也会要求给每个组件添加上key这个属性. 要解释key的 ...

  3. 26.Vue列表渲染中key的作用与原理(内含虚拟DOM的对比算法详解)

    目录 1.暴露问题,使用index作为key 2.使用唯一标识p.id作为key 3.不写key的配置 4.key的工作原理及虚拟DOM的对比算法 5.总结 25.Vue列表渲染_爱米酱的博客-CSD ...

  4. vue中:key的作用

    key是为每个vnode指定唯一的id,在同级vnode的Diff过程中,可以根据key快速的进行对比,来判断是否为相同节点,利用 key 的唯一性生成 map 对象来获取对应节点,比遍历方式更快,指 ...

  5. 【Vue】基础(三)条件渲染 - 列表渲染(key的作用与原理虚拟DOM解析) - 收集表单数据 - 持续更新中

    目录 11. 条件渲染 11.1 v-if 11.2 v-show 12. 列表渲染 12.1 v-for(基本列表使用) 12.2 key的作用与原理 真实DOM和其解析流程 虚拟 DOM 的好处 ...

  6. vue中key的作用及案例

    1.key的作用 假设现在有一个需求,在页面循环data中的数组. <div id="app"><ul><li v-for="(item, ...

  7. vue之购物车案例升级版、v-model之lazy、number、trim的使用、fetch和axios、计算属性、Mixins、虚拟dom与diff算法 key的作用及组件化开发

    文章目录 1.购物车案例升级版(含价格统计.全选/反选.商品增加减少) 2.v-model之lazy.number.trim的使用 3.fetch和axios 3.1.通过jquery+ajax实现v ...

  8. vue 相同的id不合并_vue中key的作用

    摘要 本文结合源码说明了key的作用,给出了一个不写key的反例,并分析了原因. 内容 key的作用 不写key会出的bug及原因分析 key的实践方案 key的作用 在数据变化前后,vue会得到两个 ...

  9. 列表渲染 wx:key 的作用、条件渲染 wx:if 与 hidden 的区别

    这是微信小程序踩坑系列的第三篇,想要了解更多关于微信小程序开发的那些事,欢迎关注我的<微信小程序>专栏. 前言 开发微信小程序离不开"页面渲染",对于初学者来说很难理解 ...

最新文章

  1. PGA内存作用和构成
  2. Android中应用安装分析
  3. 东南大学2004年程序设计第一届初赛解题报告
  4. elasticsearch 报表统计_螺丝ERP销售管理系统,螺丝企业专业管理统计
  5. Silverlight实用窍门系列:43.Silverlight从ListBox拖拽图标到另一ListBox
  6. 将文件上载到服务器是包含本地路径,2020年初级会计师考试照片审核通过但是上传不了是怎么回事?...
  7. linux 代码编辑器软件下载,Visual Studio Code下载
  8. 硬座、软座、硬卧、软卧、以及餐车座
  9. java this逃逸_java this引用逃逸详解
  10. turicreate 视频_iOS 推出的turiCreate功能(一) 图片识别
  11. OGV格式转成MP4格式
  12. 函数周期表丨筛选丨值丨CALCULATE
  13. matlab中Svmtrain和Svmpredict的用法
  14. horizon流程图_致同Horizon审计方法论.pdf
  15. 竣达技术丨多台精密空调微信云监控方案
  16. 3.0时代:激光投影让娱乐更真实
  17. C语言数据类型、运算符、表达式
  18. 2022年8月上海PMP®项目管理认证招生简章
  19. 地平线 J3 智驾方案
  20. 关于软件测试的更多介绍

热门文章

  1. 解决win11 WSL下通过systemd无法启动docker的问题:改为dockerd手动启动
  2. Golang中函数不支持重载
  3. go基础语法:数组定义
  4. 【收藏】解决mac问题:打不开,因为它来自身份不明的开发者
  5. 【实操】Y7000P 2020款安装黑苹果完整步骤记录
  6. k8s Service之Headless Service
  7. Scala浮点型的分类
  8. Redis配置文件常用配置详解
  9. MySQL使用用户变量优化先更新后查询
  10. IDEA导入多层父子maven项目