一文讲清楚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值
相关推荐
骑着小黑马几秒前
Electron + Vue3 + AI 做了一个新闻生成器:从 0 到 1 的完整实战记录
前端·人工智能
Sailing2 分钟前
LLM 调用从 60s 卡死降到 3s!彻底绕过 tiktoken 网络阻塞(LangChain.js 必看)
前端·langchain·llm
洋洋技术笔记3 分钟前
计算属性与侦听器
前端·vue.js
用户814486958113 分钟前
“马上”有惊喜:在 Rokid 灵珠平台上构建 FPS 级 AR 红包雷达应用
前端
李剑一9 分钟前
拿来就用!Vue3+Cesium 飞入效果封装,3D大屏多场景直接复用
前端·vue.js·cesium
天蓝色的鱼鱼37 分钟前
都2026年了还不会Vite插件开发?手写一个版本管理插件,5分钟包会!
前端·vite
苏武难飞1 小时前
分享一个33号远征队的效果!
前端
鹏程十八少1 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
亿元程序员1 小时前
这款值68亿的游戏,你不实战一下吗?安排!
前端
摸鱼的春哥2 小时前
Agent教程15:认识LangChain(中),状态机思维
前端·javascript·后端