From: daiwei Date: Fri, 22 Aug 2025 07:41:10 +0000 (+0800) Subject: fix(runtime-vapor): improve fallback handling support chaining X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e4c4d8464c2cdd4fd4e86b58ff995c13794fe8c;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-vapor): improve fallback handling support chaining --- diff --git a/packages/runtime-vapor/src/block.ts b/packages/runtime-vapor/src/block.ts index d0fa32855c..9bd47e87f3 100644 --- a/packages/runtime-vapor/src/block.ts +++ b/packages/runtime-vapor/src/block.ts @@ -99,13 +99,27 @@ export class DynamicFragment extends VaporFragment { } } -function setFragmentFallback(fragment: VaporFragment, fallback: BlockFn): void { - // stop recursion if fragment has its own fallback - if (fragment.fallback) return +export function setFragmentFallback( + fragment: VaporFragment, + fallback: BlockFn, +): void { + if (fragment.fallback) { + const originalFallback = fragment.fallback + // if the original fallback also renders invalid blocks, + // this ensures proper fallback chaining + fragment.fallback = () => { + const fallbackNodes = originalFallback() + if (isValidBlock(fallbackNodes)) { + return fallbackNodes + } + return fallback() + } + } else { + fragment.fallback = fallback + } - fragment.fallback = fallback if (isFragment(fragment.nodes)) { - setFragmentFallback(fragment.nodes, fallback) + setFragmentFallback(fragment.nodes, fragment.fallback) } }