一文讲清楚React中的key值作用与原理

文章目录

一文讲清楚React中的key值作用与原理

1. 是什么

  • 其实React中的key也好,Vue中的key也罢,都是一回事,怎么理解呢,就是身份证号。
  • 我们每个人都有身份证号,而且是唯一,不变的,这样我们在任何一个场景中的身份通过身份证号就是唯一确定的
  • React中的key就是这个逻辑,他会给他标签、组件等赋值一个唯一key,作为标识
  • 那就又问了,标识了有什么用呢
  • 问得好,React类似Vue也存在diff算法,key的作用就是比较前后的元素是否是 同一个,从而减少不必要的元素渲染
  • 如果 在diff算法中,比较前后的diff是一样的,说明元素完全相同,就省去删除和创建操作,只需要移动一下就行

2. 怎么用

  • 我们子React中进行列表渲染的时候,会要求我们给每一项绑定一个唯一的key,如果不绑定,会进行警告提示
js 复制代码
function App(props){
 const list=[
    {id:0,name:'tom0'},
    {id:1,name:'tom1'},
    {id:2,name:'tom2'},
    {id:3,name:'tom3'}
 ]
 return (
    <div>
        {list.map((item)=>(
            <div>{item.name}</div>
        ))}
    </div>
 )
}
export default App
  • 提示我们每个child应该有一个不重复的key属性
  • 我们给每个元素用id设置一个key
js 复制代码
function App(props){
 const list=[
    {id:0,name:'tom0'},
    {id:1,name:'tom1'},
    {id:2,name:'tom2'},
    {id:3,name:'tom3'}
 ]
 return (
    <div>
        {list.map((item)=>(
            <div key={item.id}>{item.name}</div>
        ))}
    </div>
 )
}
export default App
  • 运行发现没有警告提示了
  • 这时候你又问了,那用index可以作为key值么,不可以,原因很简单,如果你删除了列表中的某一项,那么这项之后的index全会发生变化就没啥意义,不利于diff算法的优化
  • 具体的diff算法我们下一篇文章讲

3. 总结

  • key必须是唯一的
  • index不建议作为key值
相关推荐
wangchunyu11410 分钟前
JavaScript 零基础入门教程
前端
hanchenxing39 分钟前
前端异步任务三方案:Celery vs Redis Stream vs BullMQ 实战对比消息队列
前端·数据库·redis·异步任务·方案对比
mONESY1 小时前
LangGraph.js 从零上手:把 Agent 工作流从一条线变成一张网
javascript
默_笙1 小时前
⚓ AI 的"官方答题卡":withStructuredOutput 与结构化输出的终局之战
前端·javascript
掘金挖土1 小时前
前端手摸手跑路之 AI 应用开发(五)
前端·后端
小羊没烦恼!2 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
码上成长2 小时前
Mapbox 围栏编辑踩过的几个坑:key 串了、形状炸了、icon 挡住绿点
前端·前端框架
SGAMERrain2 小时前
做了一个免费的在线绘画网格工具 DrawGrid,聊聊一个小工具是怎么越做越完整的
前端
我家猫叫佩奇2 小时前
🦭 厌倦了千篇一律的线性图标?Naive Icons 正式开源
前端·javascript·css
LEE3 小时前
前端转型全栈 00:AI 时代该学哪些,不该学哪些
前端·后端