Skip to content

Commit d629c5d

Browse files
committed
fix: comments before single root element breaking Transition
1 parent 065c367 commit d629c5d

File tree

1 file changed

+32
-5
lines changed

1 file changed

+32
-5
lines changed

packages/runtime-core/src/renderer.ts

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2168,7 +2168,9 @@ function baseCreateRenderer(
21682168

21692169
const remove: RemoveFn = vnode => {
21702170
const { type, el, anchor, transition } = vnode
2171-
if (type === Fragment) {
2171+
const isFragment = type === Fragment
2172+
2173+
if (!transition && isFragment) {
21722174
removeFragment(el!, anchor!)
21732175
return
21742176
}
@@ -2179,19 +2181,20 @@ function baseCreateRenderer(
21792181
}
21802182

21812183
const performRemove = () => {
2182-
hostRemove(el!)
2184+
isFragment ? removeFragment(el!, anchor!) : hostRemove(el!)
21832185
if (transition && !transition.persisted && transition.afterLeave) {
21842186
transition.afterLeave()
21852187
}
21862188
}
21872189

21882190
if (
2189-
vnode.shapeFlag & ShapeFlags.ELEMENT &&
21902191
transition &&
2191-
!transition.persisted
2192+
!transition.persisted &&
2193+
(vnode.shapeFlag & ShapeFlags.ELEMENT || isFragment)
21922194
) {
21932195
const { leave, delayLeave } = transition
2194-
const performLeave = () => leave(el!, performRemove)
2196+
const effectiveEl = isFragment ? getFirstElement(el!, anchor!) : el!
2197+
const performLeave = () => leave(effectiveEl, performRemove)
21952198
if (delayLeave) {
21962199
delayLeave(vnode.el!, performRemove, performLeave)
21972200
} else {
@@ -2200,6 +2203,22 @@ function baseCreateRenderer(
22002203
} else {
22012204
performRemove()
22022205
}
2206+
2207+
// if (
2208+
// vnode.shapeFlag & ShapeFlags.ELEMENT &&
2209+
// transition &&
2210+
// !transition.persisted
2211+
// ) {
2212+
// const { leave, delayLeave } = transition
2213+
// const performLeave = () => leave(el!, performRemove)
2214+
// if (delayLeave) {
2215+
// delayLeave(vnode.el!, performRemove, performLeave)
2216+
// } else {
2217+
// performLeave()
2218+
// }
2219+
// } else {
2220+
// performRemove()
2221+
// }
22032222
}
22042223

22052224
const removeFragment = (cur: RendererNode, end: RendererNode) => {
@@ -2214,6 +2233,14 @@ function baseCreateRenderer(
22142233
hostRemove(end)
22152234
}
22162235

2236+
const getFirstElement = (cur: RendererNode, end: RendererNode) => {
2237+
while (cur.nodeType !== Node.ELEMENT_NODE && cur !== end) {
2238+
cur = hostNextSibling(cur)!
2239+
}
2240+
2241+
return cur
2242+
}
2243+
22172244
const unmountComponent = (
22182245
instance: ComponentInternalInstance,
22192246
parentSuspense: SuspenseBoundary | null,

0 commit comments

Comments
 (0)