Просмотр исходного кода

fix(compiler-vapor): empty block

三咲智子 Kevin Deng 2 лет назад
Родитель
Сommit
b58d6a9ea1

+ 7 - 0
packages/compiler-vapor/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap

@@ -213,6 +213,13 @@ export function render(_ctx) {
 }"
 `;
 
+exports[`compiler: element transform > empty template 1`] = `
+"
+export function render(_ctx) {
+  return null
+}"
+`;
+
 exports[`compiler: element transform > invalid html nesting 1`] = `
 "import { insert as _insert, template as _template } from 'vue/vapor';
 const t0 = _template("<div>123</div>")

+ 6 - 0
packages/compiler-vapor/__tests__/transforms/transformElement.spec.ts

@@ -803,4 +803,10 @@ describe('compiler: element transform', () => {
       { type: IRNodeTypes.INSERT_NODE, parent: 3, elements: [2] },
     ])
   })
+
+  test('empty template', () => {
+    const { code } = compileWithElementTransform('')
+    expect(code).toMatchSnapshot()
+    expect(code).contain('return null')
+  })
 })

+ 6 - 4
packages/compiler-vapor/src/generators/block.ts

@@ -42,7 +42,7 @@ export function genBlockContent(
   const { dynamic, effect, operation, returns } = block
   const resetBlock = context.enterBlock(block)
 
-  if (root)
+  if (root) {
     for (const name of context.ir.component) {
       push(
         NEWLINE,
@@ -53,6 +53,7 @@ export function genBlockContent(
         ),
       )
     }
+  }
 
   for (const child of dynamic.children) {
     push(...genChildren(child, context, child.id!))
@@ -67,10 +68,11 @@ export function genBlockContent(
 
   push(NEWLINE, `return `)
 
+  const returnNodes = returns.map(n => `n${n}`)
   const returnsCode: CodeFragment[] =
-    returns.length > 1
-      ? genMulti(SEGMENTS_ARRAY, ...returns.map(n => `n${n}`))
-      : [`n${returns[0]}`]
+    returnNodes.length > 1
+      ? genMulti(SEGMENTS_ARRAY, ...returnNodes)
+      : [returnNodes[0] || 'null']
   push(...(customReturns ? customReturns(returnsCode) : returnsCode))
 
   resetBlock()