Kaynağa Gözat

feat(compiler-vapor): support v-slots expression for jsx-vapor (#271)

Co-authored-by: 三咲智子 Kevin Deng <sxzz@sxzz.moe>
zhiyuanzmj 1 yıl önce
ebeveyn
işleme
ced7ee684c

+ 3 - 1
packages/compiler-vapor/src/generators/component.ts

@@ -163,7 +163,9 @@ function genRawSlots(slots: IRSlots[], context: CodegenContext) {
     ...slots.map(slot =>
       slot.slotType === IRSlotType.STATIC
         ? genStaticSlots(slot, context)
-        : genDynamicSlot(slot, context, true),
+        : slot.slotType === IRSlotType.EXPRESSION
+          ? slot.slots.content
+          : genDynamicSlot(slot, context, true),
     ),
   )
 }

+ 6 - 1
packages/compiler-vapor/src/ir/component.ts

@@ -36,6 +36,7 @@ export enum IRSlotType {
   DYNAMIC,
   LOOP,
   CONDITIONAL,
+  EXPRESSION, // JSX only
 }
 export type IRSlotsStatic = {
   slotType: IRSlotType.STATIC
@@ -58,9 +59,13 @@ export interface IRSlotDynamicConditional {
   positive: IRSlotDynamicBasic
   negative?: IRSlotDynamicBasic | IRSlotDynamicConditional
 }
+export interface IRSlotsExpression {
+  slotType: IRSlotType.EXPRESSION
+  slots: SimpleExpressionNode
+}
 
 export type IRSlotDynamic =
   | IRSlotDynamicBasic
   | IRSlotDynamicLoop
   | IRSlotDynamicConditional
-export type IRSlots = IRSlotsStatic | IRSlotDynamic
+export type IRSlots = IRSlotsStatic | IRSlotDynamic | IRSlotsExpression