一文讲清楚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值
相关推荐
Lovereo2 分钟前
我的目标检测性能优化之路:预算不够、GPU 没有、但性能我得要
前端
T___T4 分钟前
JavaScript 变量声明详解:var、let、const 的核心差异
javascript·面试
蒙娜丽宁8 分钟前
Rust 与 WebAssembly:构建高效前端应用的全流程复盘
前端·rust·wasm
这儿有一堆花8 分钟前
使用 Actix-web 开发高性能 Web 服务
前端·数据库
豆苗学前端9 分钟前
10分钟带你入门websocket,并实现一个在线多人聊天室
前端·javascript·后端
白水清风10 分钟前
Vue3之渲染器
前端·vue.js·面试
刘永胜是我15 分钟前
解决Volta环境下npm全局包卸载失败:一次深入排查之旅
前端·node.js
白水清风15 分钟前
Vue3之组件化
前端·vue.js·面试
luckyPian18 分钟前
ES6+新特性:ES7(二)
开发语言·javascript·ecmascript
边洛洛18 分钟前
解决[PM2][ERROR] Script not found: D:\projects\xxx\start
前端·javascript