fix(transition): handle transition for v-if branches with comment

fix #5675
This commit is contained in:
Evan You 2022-04-14 18:06:52 +08:00
parent 767d212d20
commit 62eba63172
2 changed files with 20 additions and 9 deletions

View File

@ -148,12 +148,25 @@ const BaseTransitionImpl: ComponentOptions = {
return
}
// warn multiple elements
if (__DEV__ && children.length > 1) {
warn(
'<transition> can only be used on a single element or component. Use ' +
'<transition-group> for lists.'
)
let child: VNode = children[0]
if (children.length > 1) {
let hasFound = false
// locate first non-comment child
for (const c of children) {
if (c.type !== Comment) {
if (__DEV__ && hasFound) {
// warn more than one non-comment child
warn(
'<transition> can only be used on a single element or component. ' +
'Use <transition-group> for lists.'
)
break
}
child = c
hasFound = true
if (!__DEV__) break
}
}
}
// there's no need to track reactivity for these props so use the raw
@ -171,8 +184,6 @@ const BaseTransitionImpl: ComponentOptions = {
warn(`invalid <transition> mode: ${mode}`)
}
// at this point children has a guaranteed length of 1.
const child = children[0]
if (state.isLeaving) {
return emptyPlaceholder(child)
}

View File

@ -2039,7 +2039,7 @@ describe('e2e: Transition', () => {
template: `
<div id="container">
<transition>
<Comp class="test" v-if="toggle">
<Comp class="test" v-if="toggle">
<div>content</div>
</Comp>
</transition>