为什么react列表要加一个key
如果没有key,那么react就需要遍历对象的每一个属性去判断对象是否相同。
如果我们不指定key,key就会默认为index。
那么为什么用index是不好的?
假设有一段代码
const users = [{ username: "bob" }, { username: "sue" }];
users.map((u, i) => <div key={i}>{u.username}</div>);
它会被渲染为:
<div key="1">bob</div>
<div key="2">sue</div>
然后用户unshift
一个新的对象, 变成:
const users = [
{ username: "new-guy" },
{ username: "bob" },
{ username: "sue" },
];
DOM树也会相应的变为:
<div key="1">new-guy</div>
<div key="2">bob</div>
<div key="3">sue</div>
对比一下可以发现:
<div key="1">bob</div> | <div key="1">new-guy</div>
<div key="2">sue</div> | <div key="2">bob</div>
| <div key="3">sue</div>
由于react通过key识别变化,所以react此时会做以下几个操作:
- bob -> new-guy
- jack -> bob
- add sue
但是如果我们给定一个特有的key
,比如id(这个例子用name作为key
),
react就可以准确的识别出哪里发生了变化,例如:
| <div key="new-guy">new-guy</div>
<div key="bob">bob</div> | <div key="bob">bob</div>
<div key="sue">sue</div> | <div key="sue">sue</div>
这个时候react就知道,只需unshift一次就可以完成操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!