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