}
function remove(vnode: HostVNode) {
- const { type, el, anchor, children, transition } = vnode
+ const { type, el, anchor, transition } = vnode
+ if (type === Fragment) {
+ removeFragment(el!, anchor!)
+ return
+ }
+
const performRemove = () => {
hostRemove(el!)
- if (anchor != null) hostRemove(anchor)
if (
transition != null &&
!transition.persisted &&
transition.afterLeave()
}
}
- if (type === Fragment) {
- performRemove()
- removeChildren(children as HostVNode[])
- return
- }
+
if (
vnode.shapeFlag & ShapeFlags.ELEMENT &&
transition != null &&
}
}
- function removeChildren(children: HostVNode[]) {
- for (let i = 0; i < children.length; i++) {
- remove(children[i])
+ function removeFragment(cur: HostNode, end: HostNode) {
+ // For fragments, directly remove all contained DOM nodes.
+ // (fragment child nodes cannot have transition)
+ let next
+ while (cur !== end) {
+ next = hostNextSibling(cur)!
+ hostRemove(cur)
+ cur = next
}
+ hostRemove(end)
}
function unmountComponent(