]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-vapor): improve fallback handling support chaining
authordaiwei <daiwei521@126.com>
Fri, 22 Aug 2025 07:41:10 +0000 (15:41 +0800)
committerdaiwei <daiwei521@126.com>
Fri, 22 Aug 2025 07:41:10 +0000 (15:41 +0800)
packages/runtime-vapor/src/block.ts

index d0fa32855cc5189f5b72f155751c128ca648b679..9bd47e87f34af11c6a7efa5d095e026ce7752fdd 100644 (file)
@@ -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)
   }
 }