fix(ssr): render teleport inside async component (#5187)
This commit is contained in:
		
							parent
							
								
									31c0bb355a
								
							
						
					
					
						commit
						4d7803ed28
					
				@ -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><!---->`)
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -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) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user