fix(runtime-core): should not take unmount children fast path for v-for fragments

fix #1153
This commit is contained in:
Evan You 2020-05-11 13:53:15 -04:00
parent 697de07e63
commit 5b8883a846

View File

@ -1725,7 +1725,16 @@ function baseCreateRenderer(
parentSuspense,
doRemove = false
) => {
const { props, ref, children, dynamicChildren, shapeFlag, dirs } = vnode
const {
type,
props,
ref,
children,
dynamicChildren,
shapeFlag,
patchFlag,
dirs
} = vnode
const shouldInvokeDirs = shapeFlag & ShapeFlags.ELEMENT && dirs
const shouldKeepAlive = shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE
let vnodeHook: VNodeHook | undefined | null
@ -1755,7 +1764,12 @@ function baseCreateRenderer(
invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount')
}
if (dynamicChildren) {
if (
dynamicChildren &&
// #1153: fast path should not be taken for non-stable (v-for) fragments
(type !== Fragment ||
(patchFlag > 0 && patchFlag & PatchFlags.STABLE_FRAGMENT))
) {
// fast path for block nodes: only need to unmount dynamic children.
unmountChildren(dynamicChildren, parentComponent, parentSuspense)
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {