Skip to content

Commit 4d7803e

Browse files
author
Adam Jedlička
authored
fix(ssr): render teleport inside async component (#5187)
1 parent 31c0bb3 commit 4d7803e

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

packages/server-renderer/__tests__/ssrTeleport.spec.ts

+17
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,21 @@ describe('ssrRenderTeleport', () => {
117117
'<span>hello</span><!---->world<!---->'
118118
)
119119
})
120+
121+
test('teleport inside async component', async () => {
122+
const ctx: SSRContext = {}
123+
const asyncComponent = {
124+
template: '<teleport to="#target"><div>content</div></teleport>',
125+
async setup() {}
126+
}
127+
const html = await renderToString(
128+
h({
129+
template: '<async-component />',
130+
components: { asyncComponent }
131+
}),
132+
ctx
133+
)
134+
expect(html).toBe('<!--teleport start--><!--teleport end-->')
135+
expect(ctx.teleports!['#target']).toBe(`<div>content</div><!---->`)
136+
})
120137
})

packages/server-renderer/src/renderToString.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ export async function renderToString(
6363
input.provide(ssrContextKey, context)
6464
const buffer = await renderComponentVNode(vnode)
6565

66+
const result = await unrollBuffer(buffer as SSRBuffer)
67+
6668
await resolveTeleports(context)
6769

68-
return unrollBuffer(buffer as SSRBuffer)
70+
return result
6971
}
7072

7173
async function resolveTeleports(context: SSRContext) {

0 commit comments

Comments
 (0)