From: edison Date: Mon, 19 Aug 2024 08:22:05 +0000 (+0800) Subject: fix(ssr): apply ssr props to the the fallback vnode-based branch in ssr (#7247) X-Git-Tag: v3.5.0-beta.3~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=98b83e86d16c635547a1e735e5fb675aea2f0f1b;p=thirdparty%2Fvuejs%2Fcore.git fix(ssr): apply ssr props to the the fallback vnode-based branch in ssr (#7247) close #6123 --- diff --git a/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts b/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts index caeb88397b..0679c82168 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( + `
hi
`, + ) + }) + 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 be51da1b86..4744940e82 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) }