diff --git a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts
index d7ceb0bcb3c..2e7e82d5aa0 100644
--- a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts
+++ b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts
@@ -313,13 +313,15 @@ describe('ssr: components', () => {
test('with static tag', () => {
expect(
compile(
- ``
+ ``
).code
).toMatchInlineSnapshot(`
- "const { ssrRenderList: _ssrRenderList } = require(\\"vue/server-renderer\\")
+ "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require(\\"vue/server-renderer\\")
return function ssrRender(_ctx, _push, _parent, _attrs) {
- _push(\`
\`)
+ _push(\`\`)
_ssrRenderList(_ctx.list, (i) => {
_push(\`\`)
})
@@ -334,10 +336,12 @@ describe('ssr: components', () => {
``
).code
).toMatchInlineSnapshot(`
- "const { ssrRenderList: _ssrRenderList } = require(\\"vue/server-renderer\\")
+ "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require(\\"vue/server-renderer\\")
return function ssrRender(_ctx, _push, _parent, _attrs) {
- _push(\`<\${_ctx.someTag}>\`)
+ _push(\`<\${_ctx.someTag}\`)
+ _push(\`\${_ssrRenderAttrs(_attrs)}\`)
+ _push(\`>\`)
_ssrRenderList(_ctx.list, (i) => {
_push(\`\`)
})
diff --git a/packages/compiler-ssr/__tests__/ssrPortal.spec.ts b/packages/compiler-ssr/__tests__/ssrTeleport.spec.ts
similarity index 100%
rename from packages/compiler-ssr/__tests__/ssrPortal.spec.ts
rename to packages/compiler-ssr/__tests__/ssrTeleport.spec.ts
diff --git a/packages/compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts b/packages/compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts
index 80a26c98a49..949d8fc6b8a 100644
--- a/packages/compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts
+++ b/packages/compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts
@@ -1,5 +1,38 @@
-import { ComponentNode, findProp, NodeTypes } from '@vue/compiler-dom'
+import {
+ ComponentNode,
+ findProp,
+ NodeTypes,
+ createCallExpression,
+ buildProps,
+ createTemplateLiteral,
+ DirectiveNode,
+ AttributeNode,
+ createTransformContext
+} from '@vue/compiler-dom'
import { processChildren, SSRTransformContext } from '../ssrCodegenTransform'
+import { SSR_RENDER_ATTRS } from '../runtimeHelpers'
+
+function injectProp(
+ node: ComponentNode,
+ context: SSRTransformContext,
+ tag: AttributeNode | DirectiveNode
+) {
+ const { props } = buildProps(
+ node,
+ createTransformContext(context.root, context.options),
+ node.props.filter(p => p !== tag),
+ true /* ssr */
+ )
+ if (props) {
+ context.pushStatement(
+ createCallExpression(`_push`, [
+ createTemplateLiteral([
+ createCallExpression(context.helper(SSR_RENDER_ATTRS), [props])
+ ])
+ ])
+ )
+ }
+}
export function ssrProcessTransitionGroup(
node: ComponentNode,
@@ -11,6 +44,7 @@ export function ssrProcessTransitionGroup(
// dynamic :tag
context.pushStringPart(`<`)
context.pushStringPart(tag.exp!)
+ injectProp(node, context, tag)
context.pushStringPart(`>`)
processChildren(
@@ -30,7 +64,9 @@ export function ssrProcessTransitionGroup(
context.pushStringPart(`>`)
} else {
// static tag
- context.pushStringPart(`<${tag.value!.content}>`)
+ context.pushStringPart(`<${tag.value!.content}`)
+ injectProp(node, context, tag)
+ context.pushStringPart(`>`)
processChildren(node.children, context, false, true)
context.pushStringPart(`${tag.value!.content}>`)
}