React 或者 vue 为什么在列表组件中使用 key

先回答:

key的作用主要是为了 虚拟DOM 在执行 diff算法 时更快的找到对应的节点,提高diff速度,高效的更新 Virtual DOM;

key值采用index和id的区别?

const list 1 = [
  { id: 1, name; 'test1' },
  { id: 2, name; 'test2' },
  { id: 3, name; 'test3' }
]
// 向中间插入test4之后
const list2 = [
  { id: 1, name: "test1" },
  { id: 4, name: "test4 我是在最后添加的一条数据" },
  { id: 2, name: "test2" },
  { id: 3, name: "test3" }
];
  • 使用index作为key
之前DOM更新后的DOM
key:0 index: 0 name: test1key:0 index: 0 name: test1
key:1 index: 1 name: test2key:1 index: 2 name: test4 我是在最后添加的一条数据
key:2 index: 2 name: test3key:1 index: 1 name: test2
key:2 index: 2 name: test3

只插入了一条数据,但是三条数据都要重新渲染

  • 使用id作为key
之前DOM更新后的DOM
key:1 id: 1 name: test1key:1 id: 1 name: test1
key:2 id: 2 name: test2key:4 id: 4 name: test4 我是在最后添加的一条数据
key:3 id: 3 name: test3key:2 id: 2 name: test2
key:3 id: 3 name: test3

对比发现:只有一条数据变化了,就是id为4的数据,因此只新渲染这条数据,其他的复用之前的就可以了。

vue和react的Virtual DOM的Diff算法大致相同,其核心是基于两个简单的假设:

  1. 两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构。
  2. 同一层级的一组节点,他们可以通过唯一的id进行区分。

基于以上这两点假设,使得虚拟DOM的Diff算法的复杂度从O(n^3)降到了O(n)。

key的作用主要是为了高效的更新虚拟DOM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值