@@ -2168,7 +2168,9 @@ function baseCreateRenderer(
2168
2168
2169
2169
const remove : RemoveFn = vnode => {
2170
2170
const { type, el, anchor, transition } = vnode
2171
- if ( type === Fragment ) {
2171
+ const isFragment = type === Fragment
2172
+
2173
+ if ( ! transition && isFragment ) {
2172
2174
removeFragment ( el ! , anchor ! )
2173
2175
return
2174
2176
}
@@ -2179,19 +2181,20 @@ function baseCreateRenderer(
2179
2181
}
2180
2182
2181
2183
const performRemove = ( ) => {
2182
- hostRemove ( el ! )
2184
+ isFragment ? removeFragment ( el ! , anchor ! ) : hostRemove ( el ! )
2183
2185
if ( transition && ! transition . persisted && transition . afterLeave ) {
2184
2186
transition . afterLeave ( )
2185
2187
}
2186
2188
}
2187
2189
2188
2190
if (
2189
- vnode . shapeFlag & ShapeFlags . ELEMENT &&
2190
2191
transition &&
2191
- ! transition . persisted
2192
+ ! transition . persisted &&
2193
+ ( vnode . shapeFlag & ShapeFlags . ELEMENT || isFragment )
2192
2194
) {
2193
2195
const { leave, delayLeave } = transition
2194
- const performLeave = ( ) => leave ( el ! , performRemove )
2196
+ const effectiveEl = isFragment ? getFirstElement ( el ! , anchor ! ) : el !
2197
+ const performLeave = ( ) => leave ( effectiveEl , performRemove )
2195
2198
if ( delayLeave ) {
2196
2199
delayLeave ( vnode . el ! , performRemove , performLeave )
2197
2200
} else {
@@ -2200,6 +2203,22 @@ function baseCreateRenderer(
2200
2203
} else {
2201
2204
performRemove ( )
2202
2205
}
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
+ // }
2203
2222
}
2204
2223
2205
2224
const removeFragment = ( cur : RendererNode , end : RendererNode ) => {
@@ -2214,6 +2233,14 @@ function baseCreateRenderer(
2214
2233
hostRemove ( end )
2215
2234
}
2216
2235
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
+
2217
2244
const unmountComponent = (
2218
2245
instance : ComponentInternalInstance ,
2219
2246
parentSuspense : SuspenseBoundary | null ,
0 commit comments