Skip to content

Commit 4669215

Browse files
authored
fix(ssr): render components returning render function from setup (#720)
1 parent a0163f1 commit 4669215

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

packages/server-renderer/__tests__/renderToString.spec.ts

+29-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import {
44
createCommentVNode,
55
withScopeId,
66
resolveComponent,
7-
ComponentOptions
7+
ComponentOptions,
8+
ref,
9+
defineComponent
810
} from 'vue'
911
import { escapeHtml, mockWarn } from '@vue/shared'
1012
import { renderToString, renderComponent } from '../src/renderToString'
@@ -43,6 +45,32 @@ describe('ssr: renderToString', () => {
4345
).toBe(`<div>hello</div>`)
4446
})
4547

48+
test('option components returning render from setup', async () => {
49+
expect(
50+
await renderToString(
51+
createApp({
52+
setup() {
53+
const msg = ref('hello')
54+
return () => h('div', msg.value)
55+
}
56+
})
57+
)
58+
).toBe(`<div>hello</div>`)
59+
})
60+
61+
test('setup components returning render from setup', async () => {
62+
expect(
63+
await renderToString(
64+
createApp(
65+
defineComponent((props: {}) => {
66+
const msg = ref('hello')
67+
return () => h('div', msg.value)
68+
})
69+
)
70+
)
71+
).toBe(`<div>hello</div>`)
72+
})
73+
4674
test('optimized components', async () => {
4775
expect(
4876
await renderToString(

packages/server-renderer/src/renderToString.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ function renderComponentSubTree(
177177
if (isFunction(comp)) {
178178
renderVNode(push, renderComponentRoot(instance), instance)
179179
} else {
180-
if (!comp.ssrRender && !comp.render && isString(comp.template)) {
180+
if (!instance.render && !comp.ssrRender && isString(comp.template)) {
181181
comp.ssrRender = ssrCompile(comp.template, instance)
182182
}
183183

@@ -187,7 +187,7 @@ function renderComponentSubTree(
187187
setCurrentRenderingInstance(instance)
188188
comp.ssrRender(instance.proxy, push, instance)
189189
setCurrentRenderingInstance(null)
190-
} else if (comp.render) {
190+
} else if (instance.render) {
191191
renderVNode(push, renderComponentRoot(instance), instance)
192192
} else {
193193
throw new Error(

0 commit comments

Comments
 (0)