一文讲清楚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值
相关推荐
用户33790448021718 分钟前
HTML5语义化标签详解
前端
唐某人丶21 分钟前
教你如何用 JS 实现一个 Agent 系统(1)—— 认识 Agentic System
前端·人工智能
丘山子26 分钟前
分享链接格式不统一,rel="share-url" 提案试图解决这个问题
前端·面试·html
你也向往长安城吗1 小时前
基于 navmesh 的路径搜索技术剖析 (游戏、三维方向必看!!!)
javascript·游戏·游戏开发
JustHappy1 小时前
「Versakit攻略」🔥Pnpm+Monorepo+Changesets搭建通用组件库项目和发包流程
前端·javascript·vue.js
紫金龙腾2 小时前
EDGE 、chrome、浏览器显示“由你的组织管理”
前端·chrome·edge
用户66197734585752 小时前
Vue3笔记
前端·vue.js
long3162 小时前
适配器模式 java demo
java·javascript·后端·程序人生·设计模式·适配器模式
2401_837088503 小时前
ref 简单讲解
前端·javascript·vue.js
折果4 小时前
如何在vue项目中封装自己的全局message组件?一步教会你!
前端·面试