]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(transition-group): should collect raw children with Fragment (#1046)
authorunderfin <2218301630@qq.com>
Thu, 30 Apr 2020 19:06:50 +0000 (03:06 +0800)
committerGitHub <noreply@github.com>
Thu, 30 Apr 2020 19:06:50 +0000 (15:06 -0400)
fix #1045

packages/runtime-dom/src/components/TransitionGroup.ts

index 018364411451ae7e5948c10840d0838e294e05f7..aa8adf1437e1696279970d1dfc7e2e9d3789375a 100644 (file)
@@ -101,12 +101,7 @@ const TransitionGroupImpl = {
       const cssTransitionProps = resolveTransitionProps(rawProps)
       const tag = rawProps.tag || Fragment
       prevChildren = children
-      children = slots.default ? slots.default() : []
-
-      // handle fragment children case, e.g. v-for
-      if (children.length === 1 && children[0].type === Fragment) {
-        children = children[0].children as VNode[]
-      }
+      children = getTransitionRawChildren(slots.default ? slots.default() : [])
 
       for (let i = 0; i < children.length; i++) {
         const child = children[i]
@@ -136,6 +131,20 @@ const TransitionGroupImpl = {
   }
 }
 
+function getTransitionRawChildren(children: VNode[]): VNode[] {
+  let ret: VNode[] = []
+  for (let i = 0; i < children.length; i++) {
+    const child = children[i]
+    // handle fragment children case, e.g. v-for
+    if (child.type === Fragment) {
+      ret = ret.concat(getTransitionRawChildren(child.children as VNode[]))
+    } else {
+      ret.push(child)
+    }
+  }
+  return ret
+}
+
 // remove mode props as TransitionGroup doesn't support it
 delete TransitionGroupImpl.props.mode