vue 中 diff中的key

vue中的diff 离不开 sbabbdom

页面每一次更新diff将会使页面最小量更新,key就是节点的唯一标识,告诉diff,在更改前后透明是同一个DOM节点。

const vnode1 = h('div', {}, [
	h(
		'p',
		{
			key: '1'
		},
		'A'
	),
	h('p', { key: '2' }, 'B'),
	h('p', { key: '3' }, 'C'),
	h('p', { key: '4' }, 'D')
])
let container = document.querySelector('#container')
let btn = document.querySelector('#btn') // 点击按钮页面更新
patch(container, vnode1)
let vnode2 = h('div', {}, [
	h('p', { key: '5' }, 'E'),
	h('p', { key: '1' }, 'A'),
	h('p', { key: '2' }, 'B'),
	h('p', { key: '3' }, 'C'),
	h('p', { key: '4' }, 'D')
])
btn.onclick = function () {
	patch(vnode1, vnode2)
}

再最终的结果显示,A ,B ,C ,D 并不会被更新,这样就做到了最小量更新。

同时,只有是同一个虚拟节点,才进行精细化比较,也就是拥有相同的key,否则就会暴力的 删除,插入等。
只能进行同层比较,不会跨层比较,比如 父节点 更改等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值