Pārlūkot izejas kodu

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

fix #1153
Evan You 6 gadi atpakaļ
vecāks
revīzija
5b8883a846
1 mainītis faili ar 16 papildinājumiem un 2 dzēšanām
  1. 16 2
      packages/runtime-core/src/renderer.ts

+ 16 - 2
packages/runtime-core/src/renderer.ts

@@ -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) {