From 5b4673fccdd36a4f55662f9ec339606ca7a78ad5 Mon Sep 17 00:00:00 2001 From: daiwei Date: Fri, 25 Jul 2025 22:15:47 +0800 Subject: [PATCH] chore: tweaks --- packages/runtime-vapor/src/block.ts | 4 ++-- packages/runtime-vapor/src/vdomInterop.ts | 24 ++++------------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/packages/runtime-vapor/src/block.ts b/packages/runtime-vapor/src/block.ts index cdc562e32d..9ccb0fb26a 100644 --- a/packages/runtime-vapor/src/block.ts +++ b/packages/runtime-vapor/src/block.ts @@ -98,9 +98,9 @@ export class DynamicFragment extends VaporFragment { } } -function setFragmentFallback( +export function setFragmentFallback( fragment: VaporFragment, - fallback: BlockFn | undefined, + fallback: BlockFn, ): void { // stop recursion if fragment has its own fallback if (fragment.fallback) return diff --git a/packages/runtime-vapor/src/vdomInterop.ts b/packages/runtime-vapor/src/vdomInterop.ts index 8dafdeaaf6..eb579a23be 100644 --- a/packages/runtime-vapor/src/vdomInterop.ts +++ b/packages/runtime-vapor/src/vdomInterop.ts @@ -35,11 +35,11 @@ import { } from './component' import { type Block, - DynamicFragment, VaporFragment, insert, isFragment, remove, + setFragmentFallback, } from './block' import { EMPTY_OBJ, extend, isArray, isFunction } from '@vue/shared' import { type RawProps, rawPropsProxyHandlers } from './componentProps' @@ -116,22 +116,12 @@ const vaporInteropImpl: Omit< const { slot, fallback } = n2.vs! const propsRef = (n2.vs!.ref = shallowRef(n2.props)) const slotBlock = slot(new Proxy(propsRef, vaporSlotPropsProxyHandler)) - // forwarded vdom slot without its own fallback, use the fallback provided by - // the slot outlet - if (slotBlock instanceof DynamicFragment) { - // vapor slot's nodes is a forwarded vdom slot - let nodes = slotBlock.nodes - while (isFragment(nodes)) { - ensureVDOMSlotFallback(nodes, fallback) - nodes = nodes.nodes - } + // handle nested fragments + if (fallback && isFragment(slotBlock)) { + setFragmentFallback(slotBlock, createFallback(fallback)) // use fragment's anchor when possible selfAnchor = slotBlock.anchor - } else if (isFragment(slotBlock)) { - ensureVDOMSlotFallback(slotBlock, fallback) - selfAnchor = slotBlock.anchor! } - if (!selfAnchor) selfAnchor = createTextNode() insert((n2.el = n2.anchor = selfAnchor), container, anchor) insert((n2.vb = slotBlock), container, selfAnchor) @@ -356,12 +346,6 @@ export const vaporInteropPlugin: Plugin = app => { }) satisfies App['mount'] } -function ensureVDOMSlotFallback(block: VaporFragment, fallback?: () => any) { - if (block.insert && !block.fallback && fallback) { - block.fallback = createFallback(fallback) - } -} - const createFallback = (fallback: () => any) => ( -- 2.47.2