前端面试~ vue 中 key 的作用和工作作原理

本文介绍了Vue中key的主要用途在于diff算法,用于提高渲染效率和解决list渲染问题。通过对比设置了key和未设置key时的diff过程,阐述了key如何减少DOM操作,提升性能。
摘要由CSDN通过智能技术生成

解析

key 在 vue 中,除了解决 list 渲染过程中一些隐蔽的 bug,提高渲染效率,以及在过渡过程中区分节点以外, 最主要的用途还是在 diff 算法中

首先要知道 vue 的更新流程:

reactiveSetter → dep.notify()→ watcher.update() → queueWatcher() → watcher.run() → updateComponent() → vm._render() → vm._update() → vm. patch () → patch()

而 key 起作用的位置则在 patch() 中。

要回答这个问题,除了要知道更新流程以外,还要知道 vue 的 diff 算法:首尾假猜策略。由于上文已经详细描述过了,这里就不再赘述。

在 diff 的过程中,首先需要判断两个节点是否是相同类型的节点,用到的方法如下:

function sameVnode(a, b) {
  return (
    a.key === b.key &&
    ((a.tag === b.tag &&
      a.isComment === b.isComment &&
      isDef(a.data) === isDef(b.data) &&
      sameInputType(a, b)) ||
      (isTrue(a.isAsyncPlaceholder) &&
        a.asyncFactory === b.asyncFactory &&
      
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值