Przeglądaj źródła

fix(runtime-vapor): prioritize pending slot fragment validity

daiwei 6 dni temu
rodzic
commit
0f3ab714cd

+ 8 - 0
packages/runtime-vapor/__tests__/componentSlots.spec.ts

@@ -175,6 +175,14 @@ describe('component: slots', () => {
       expect(isValidBlock(frag)).toBe(true)
     })
 
+    test('slot fragment validityPending takes precedence over effective output', () => {
+      const frag = new SlotFragment()
+
+      frag.validityPending = true
+
+      expect(isValidBlock(frag)).toBe(true)
+    })
+
     test('slot fragment remove cleans active fallback and fallback scope', () => {
       const container = document.createElement('div')
       const stop = vi.fn()

+ 2 - 2
packages/runtime-vapor/src/block.ts

@@ -77,10 +77,10 @@ export function isValidBlock(block: Block | null | undefined): boolean {
     return isValidBlock(block.block)
   } else if (isArray(block)) {
     return block.length > 0 && block.some(isValidBlock)
-  } else if (block instanceof SlotFragment) {
-    return isValidBlock(block.getEffectiveOutput())
   } else if (block.validityPending) {
     return true
+  } else if (block instanceof SlotFragment) {
+    return isValidBlock(block.getEffectiveOutput())
   } else {
     // fragment
     return isValidBlock(block.nodes)