Kaynağa Gözat

chore: sync https://github.com/vuejs/core/pull/13408/commits/d7a767290a046c6f38818628bf59bfd05675edf8#diff-0dd3482ecc41e155cfe3af80f16083b197377604944b94f44c5b9d933a5afa06

daiwei 6 ay önce
ebeveyn
işleme
d85b8bf098
1 değiştirilmiş dosya ile 15 ekleme ve 4 silme
  1. 15 4
      packages/runtime-vapor/src/fragment.ts

+ 15 - 4
packages/runtime-vapor/src/fragment.ts

@@ -203,12 +203,23 @@ export function setFragmentFallback(
   fragment: VaporFragment,
   fallback: BlockFn,
 ): void {
-  // stop recursion if fragment has its own fallback
-  if (fragment.fallback) return
+  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)
   }
 }