patch 函数中关于 destroy old node 的逻辑问题
来源:2-8 update

hood
2019-03-31
请问黄老师,什么情况下下面这段代码会走到 else-if 这条分支逻辑里?能举个例子吗?
我的理解 parentElm 肯定能取到值啊,如果 oldVnode 是真实 DOM ,parentElm 就是 body,否则既然有传 oldVnode,那肯定是经过一次 patch 了,那么 oldVnode.elm 就应该有对应的元素吧,这样 parentElm 也不应该会取空啊,这里实在是不理解。
// destroy old node
if (isDef(parentElm)) {
removeVnodes(parentElm, [oldVnode], 0, 0);
} else if (isDef(oldVnode.tag)) {
invokeDestroyHook(oldVnode);
}
写回答
1回答
-
如果你的根节点没有挂载到 DOM 上,那么它的 parentElm 就是 null,这个可能在你实际项目中比较难遇到,毕竟你是要挂载到 DOM 上的,但 Vue 的单测中就经常会遇到,比如:
这个 el 压根就没挂载到 DOM 上,所以就会触发到这个 else if 逻辑012019-04-01
相似问题