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,这个过程会执行
那么这个 cbs 就是在创建 createPatchFunction 的时候传入的
这里的 modules 就是一些模块,其中就包括 class 和 style,那么执行他们的 update 方法就是会去更新 class 和 style。10
相似问题