diff --git a/src/diff/index.js b/src/diff/index.js index 3c4b96929f..4c4c21ce93 100644 --- a/src/diff/index.js +++ b/src/diff/index.js @@ -480,15 +480,6 @@ export function unmount(vnode, parentVNode, skipRemove) { if (!r.current || r.current === vnode._dom) applyRef(r, null, parentVNode); } - let dom; - if (!skipRemove && typeof vnode.type != 'function') { - skipRemove = (dom = vnode._dom) != null; - } - - // Must be set to `undefined` to properly clean up `_nextDom` - // for which `null` is a valid value. See comment in `create-element.js` - vnode._dom = vnode._nextDom = undefined; - if ((r = vnode._component) != null) { if (r.componentWillUnmount) { try { @@ -503,11 +494,17 @@ export function unmount(vnode, parentVNode, skipRemove) { if ((r = vnode._children)) { for (let i = 0; i < r.length; i++) { - if (r[i]) unmount(r[i], parentVNode, skipRemove); + if (r[i]) { + unmount(r[i], parentVNode, typeof vnode.type != 'function'); + } } } - if (dom != null) removeNode(dom); + if (!skipRemove && vnode._dom != null) removeNode(vnode._dom); + + // Must be set to `undefined` to properly clean up `_nextDom` + // for which `null` is a valid value. See comment in `create-element.js` + vnode._dom = vnode._nextDom = undefined; } /** The `.render()` method for a PFC backing instance. */