vue怎么判断class变化了

来源:3-5 patch(下)

慕工程0206990

2021-03-06

在虚拟dom中,判断两节点是否相同(sameVnode),只判断tag和key。
那么节点上的属性变化,是怎么做到响应式的呢。

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 &&
        isUndef(b.asyncFactory.error)
      )
    )
  )
}

比如oldVnode的class=“old”。newVnode的class=“new”,只判断key和tag无法知道class更新

写回答

1回答

ustbhuangyi

2021-03-06

如果是动态数据,那么数据变化的时候就会触发组件重新渲染,渲染会执行 patch,在 patch 的时候这种相同的节点判断 sameVNode 为 true 后会执行 patchVnode,这个过程会执行 

//img.mukewang.com/szimg/60436a73094378aa20600450.jpg

那么这个 cbs 就是在创建 createPatchFunction 的时候传入的 

//img.mukewang.com/szimg/60436a9b0953379d18561098.jpg

这里的 modules 就是一些模块,其中就包括 class 和 style,那么执行他们的 update 方法就是会去更新 class 和 style。

1
0

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4986 学习 · 1038 问题

查看课程