一文讲清楚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值
相关推荐
2503_928411561 小时前
12.4 axios的二次封装-深拷贝
前端·javascript·vue.js
你真的可爱呀4 小时前
uniapp+vue3项目中的常见报错情况以及解决方法
前端·vue.js·uni-app
差点GDP8 小时前
模拟请求测试 Fake Rest API Test
前端·网络·json
酒尘&9 小时前
Hook学习-上篇
前端·学习·react.js·前端框架·react
houyhea9 小时前
从香港竹脚手架到前端脚手架:那些"借来"的发展智慧与安全警示
前端
哈哈~haha10 小时前
Step 14: Custom CSS and Theme Colors 自定义CSS类
前端·css·ui5
Ndmzi10 小时前
Matlab编程技巧:自定义Simulink菜单(理解补充)
前端·javascript·python
勇气要爆发10 小时前
物种起源—JavaScript原型链详解
开发语言·javascript·原型模式
我命由我1234510 小时前
VSCode - VSCode 修改文件树缩进
前端·ide·vscode·前端框架·编辑器·html·js
SoaringHeart11 小时前
Flutter组件封装:验证码倒计时按钮 TimerButton
前端·flutter