fix(transition-group): should collect raw children with Fragment (#1046)

fix #1045
This commit is contained in:
underfin 2020-05-01 03:06:50 +08:00 committed by GitHub
parent ba240eb497
commit 8ed3455251
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -101,12 +101,7 @@ const TransitionGroupImpl = {
const cssTransitionProps = resolveTransitionProps(rawProps) const cssTransitionProps = resolveTransitionProps(rawProps)
const tag = rawProps.tag || Fragment const tag = rawProps.tag || Fragment
prevChildren = children prevChildren = children
children = slots.default ? slots.default() : [] children = getTransitionRawChildren(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[]
}
for (let i = 0; i < children.length; i++) { for (let i = 0; i < children.length; i++) {
const child = children[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 // remove mode props as TransitionGroup doesn't support it
delete TransitionGroupImpl.props.mode delete TransitionGroupImpl.props.mode