]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(ssr): render teleport inside async component (#5187)
authorAdam Jedlička <adajedlicka@gmail.com>
Fri, 13 May 2022 07:57:10 +0000 (09:57 +0200)
committerGitHub <noreply@github.com>
Fri, 13 May 2022 07:57:10 +0000 (03:57 -0400)
packages/server-renderer/__tests__/ssrTeleport.spec.ts
packages/server-renderer/src/renderToString.ts

index fda959186150a086a2e607bcb9569bcc350ea5f6..f26c903584af122246485965bd7d865d6019a283 100644 (file)
@@ -117,4 +117,21 @@ describe('ssrRenderTeleport', () => {
       '<span>hello</span><!---->world<!---->'
     )
   })
+
+  test('teleport inside async component', async () => {
+    const ctx: SSRContext = {}
+    const asyncComponent = {
+      template: '<teleport to="#target"><div>content</div></teleport>',
+      async setup() {}
+    }
+    const html = await renderToString(
+      h({
+        template: '<async-component />',
+        components: { asyncComponent }
+      }),
+      ctx
+    )
+    expect(html).toBe('<!--teleport start--><!--teleport end-->')
+    expect(ctx.teleports!['#target']).toBe(`<div>content</div><!---->`)
+  })
 })
index cf6e9759a35237fb6f60a31c7a85a187edeeee71..f35ee9d62d972a3e698105da54320feb81212481 100644 (file)
@@ -63,9 +63,11 @@ export async function renderToString(
   input.provide(ssrContextKey, context)
   const buffer = await renderComponentVNode(vnode)
 
+  const result = await unrollBuffer(buffer as SSRBuffer)
+
   await resolveTeleports(context)
 
-  return unrollBuffer(buffer as SSRBuffer)
+  return result
 }
 
 async function resolveTeleports(context: SSRContext) {