Vue2 源码里 patchVnode 旧节点有 text ,无新节点的情况?

Vue2.6.14 源码 core/vdom/patch.js 文件里
patchVnode 方法中,五种新旧节点比较的情况,其中一种旧节点有 text ,无新节点的情况,我无法模拟出具体的应用场景,请教下各位。

// 省去了部分代码
function patchVnode(oldVnode, vnode) {
    if (isUndef(vnode.text)) {

        if (isDef(oldVnode.text)) {
          nodeOps.setTextContent(elm, '')
        }
    }
}

比如这个例子,

<div id="app">{{name}}</div>

name 从有值到为空的情况,这匹配到的是

if (oldVnode.text !== vnode.text) {
  nodeOps.setTextContent(elm, vnode.text)
}
阅读 2.3k
1 个回答

isUndef(vnode.text)的主要目的不是判断文本内容是不是空,而是为了判断是不是文本节点,包括后面判断不是文本节点的话有没有子元素
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题