diff --git a/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts b/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts
index caeb88397..0679c8216 100644
--- a/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts
+++ b/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts
@@ -1,5 +1,5 @@
import { createApp, createVNode } from 'vue'
-import { renderToString } from '../src/renderToString'
+import { renderToString } from '../src'
describe('ssr: dynamic component', () => {
test('resolved to component', async () => {
@@ -17,6 +17,23 @@ describe('ssr: dynamic component', () => {
).toBe(`
slot
`)
})
+ test('resolved to component with v-show', async () => {
+ expect(
+ await renderToString(
+ createApp({
+ components: {
+ one: {
+ template: ``,
+ },
+ },
+ template: `hi`,
+ }),
+ ),
+ ).toBe(
+ ``,
+ )
+ })
+
test('resolve to element', async () => {
expect(
await renderToString(
diff --git a/packages/server-renderer/src/render.ts b/packages/server-renderer/src/render.ts
index be51da1b8..4744940e8 100644
--- a/packages/server-renderer/src/render.ts
+++ b/packages/server-renderer/src/render.ts
@@ -217,7 +217,11 @@ export function renderVNode(
parentComponent: ComponentInternalInstance,
slotScopeId?: string,
): void {
- const { type, shapeFlag, children } = vnode
+ const { type, shapeFlag, children, dirs, props } = vnode
+ if (dirs) {
+ vnode.props = applySSRDirectives(vnode, props, dirs)
+ }
+
switch (type) {
case Text:
push(escapeHtml(children as string))
@@ -283,13 +287,9 @@ function renderElementVNode(
slotScopeId?: string,
) {
const tag = vnode.type as string
- let { props, children, shapeFlag, scopeId, dirs } = vnode
+ let { props, children, shapeFlag, scopeId } = vnode
let openTag = `<${tag}`
- if (dirs) {
- props = applySSRDirectives(vnode, props, dirs)
- }
-
if (props) {
openTag += ssrRenderAttrs(props, tag)
}