fix(runtime-core): should not take unmount children fast path for v-for fragments
fix #1153
This commit is contained in:
parent
697de07e63
commit
5b8883a846
@ -1725,7 +1725,16 @@ function baseCreateRenderer(
|
|||||||
parentSuspense,
|
parentSuspense,
|
||||||
doRemove = false
|
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 shouldInvokeDirs = shapeFlag & ShapeFlags.ELEMENT && dirs
|
||||||
const shouldKeepAlive = shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE
|
const shouldKeepAlive = shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE
|
||||||
let vnodeHook: VNodeHook | undefined | null
|
let vnodeHook: VNodeHook | undefined | null
|
||||||
@ -1755,7 +1764,12 @@ function baseCreateRenderer(
|
|||||||
invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount')
|
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.
|
// fast path for block nodes: only need to unmount dynamic children.
|
||||||
unmountChildren(dynamicChildren, parentComponent, parentSuspense)
|
unmountChildren(dynamicChildren, parentComponent, parentSuspense)
|
||||||
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
|
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user