浏览代码

fix(runtime-core): handle fragment with null children (#10010)

close #10007
Doctorwu 2 年之前
父节点
当前提交
3bf34b767e
共有 2 个文件被更改,包括 17 次插入1 次删除
  1. 12 0
      packages/runtime-core/__tests__/rendererFragment.spec.ts
  2. 5 1
      packages/runtime-core/src/renderer.ts

+ 12 - 0
packages/runtime-core/__tests__/rendererFragment.spec.ts

@@ -351,4 +351,16 @@ describe('renderer: fragment', () => {
     render(renderFn(['two', 'one']), root)
     expect(serializeInner(root)).toBe(`text<div>two</div>text<div>one</div>`)
   })
+
+  // #10007
+  test('empty fragment', () => {
+    const root = nodeOps.createElement('div')
+
+    const renderFn = () => {
+      return openBlock(true), createBlock(Fragment, null)
+    }
+
+    render(renderFn(), root)
+    expect(serializeInner(root)).toBe('')
+  })
 })

+ 5 - 1
packages/runtime-core/src/renderer.ts

@@ -1086,7 +1086,11 @@ function baseCreateRenderer(
       // since they are either generated by the compiler, or implicitly created
       // from arrays.
       mountChildren(
-        n2.children as VNodeArrayChildren,
+        // #10007
+        // such fragment like `<></>` will be compiled into
+        // a fragment which doesn't have a children.
+        // In this case fallback to an empty array
+        (n2.children || []) as VNodeArrayChildren,
         container,
         fragmentEndAnchor,
         parentComponent,