Преглед изворни кода

fix(keep-alive): fix keep-alive rendering when placed in vnode branch

fix #4817
Bulat Aykaev пре 4 година
родитељ
комит
0841b9b524

+ 5 - 2
packages/runtime-core/src/components/KeepAlive.ts

@@ -96,8 +96,11 @@ const KeepAliveImpl: ComponentOptions = {
 
     // if the internal renderer is not registered, it indicates that this is server-side rendering,
     // for KeepAlive, we just need to render its children
-    if (!sharedContext.renderer) {
-      return slots.default
+    if (__SSR__ && !sharedContext.renderer) {
+      return () => {
+        const children = slots.default && slots.default()
+        return children && children.length === 1 ? children[0] : children
+      }
     }
 
     const cache: Cache = new Map()

+ 1 - 1
packages/server-renderer/__tests__/render.spec.ts

@@ -676,7 +676,7 @@ function testRender(type: string, render: typeof renderToString) {
           render: () => h('p', 'hello')
         }
         expect(await render(h(KeepAlive, () => h(MyComp)))).toBe(
-          `<!--[--><p>hello</p><!--]-->`
+          `<p>hello</p>`
         )
       })