mirror of https://github.com/vuejs/core.git
fix(ssr): apply ssr props to the the fallback vnode-based branch in ssr (#7247)
close #6123
This commit is contained in:
parent
ac2a410e46
commit
98b83e86d1
|
@ -1,5 +1,5 @@
|
||||||
import { createApp, createVNode } from 'vue'
|
import { createApp, createVNode } from 'vue'
|
||||||
import { renderToString } from '../src/renderToString'
|
import { renderToString } from '../src'
|
||||||
|
|
||||||
describe('ssr: dynamic component', () => {
|
describe('ssr: dynamic component', () => {
|
||||||
test('resolved to component', async () => {
|
test('resolved to component', async () => {
|
||||||
|
@ -17,6 +17,23 @@ describe('ssr: dynamic component', () => {
|
||||||
).toBe(`<div><!--[--><span>slot</span><!--]--></div>`)
|
).toBe(`<div><!--[--><span>slot</span><!--]--></div>`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('resolved to component with v-show', async () => {
|
||||||
|
expect(
|
||||||
|
await renderToString(
|
||||||
|
createApp({
|
||||||
|
components: {
|
||||||
|
one: {
|
||||||
|
template: `<component is="div"><slot/></component>`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
template: `<one><one v-show="false">hi</one></one>`,
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
).toBe(
|
||||||
|
`<div><!--[--><div style=\"display:none;\"><!--[-->hi<!--]--></div><!--]--></div>`,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
test('resolve to element', async () => {
|
test('resolve to element', async () => {
|
||||||
expect(
|
expect(
|
||||||
await renderToString(
|
await renderToString(
|
||||||
|
|
|
@ -217,7 +217,11 @@ export function renderVNode(
|
||||||
parentComponent: ComponentInternalInstance,
|
parentComponent: ComponentInternalInstance,
|
||||||
slotScopeId?: string,
|
slotScopeId?: string,
|
||||||
): void {
|
): void {
|
||||||
const { type, shapeFlag, children } = vnode
|
const { type, shapeFlag, children, dirs, props } = vnode
|
||||||
|
if (dirs) {
|
||||||
|
vnode.props = applySSRDirectives(vnode, props, dirs)
|
||||||
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Text:
|
case Text:
|
||||||
push(escapeHtml(children as string))
|
push(escapeHtml(children as string))
|
||||||
|
@ -283,13 +287,9 @@ function renderElementVNode(
|
||||||
slotScopeId?: string,
|
slotScopeId?: string,
|
||||||
) {
|
) {
|
||||||
const tag = vnode.type as string
|
const tag = vnode.type as string
|
||||||
let { props, children, shapeFlag, scopeId, dirs } = vnode
|
let { props, children, shapeFlag, scopeId } = vnode
|
||||||
let openTag = `<${tag}`
|
let openTag = `<${tag}`
|
||||||
|
|
||||||
if (dirs) {
|
|
||||||
props = applySSRDirectives(vnode, props, dirs)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (props) {
|
if (props) {
|
||||||
openTag += ssrRenderAttrs(props, tag)
|
openTag += ssrRenderAttrs(props, tag)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue