From 4669215ca2f82d90a1bd730613259f3167e199cd Mon Sep 17 00:00:00 2001 From: Dmitry Sharshakov Date: Sat, 15 Feb 2020 19:11:55 +0300 Subject: [PATCH] fix(ssr): render components returning render function from setup (#720) --- .../__tests__/renderToString.spec.ts | 30 ++++++++++++++++++- .../server-renderer/src/renderToString.ts | 4 +-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/server-renderer/__tests__/renderToString.spec.ts b/packages/server-renderer/__tests__/renderToString.spec.ts index eb27c4b08be..ed60dcaeb8d 100644 --- a/packages/server-renderer/__tests__/renderToString.spec.ts +++ b/packages/server-renderer/__tests__/renderToString.spec.ts @@ -4,7 +4,9 @@ import { createCommentVNode, withScopeId, resolveComponent, - ComponentOptions + ComponentOptions, + ref, + defineComponent } from 'vue' import { escapeHtml, mockWarn } from '@vue/shared' import { renderToString, renderComponent } from '../src/renderToString' @@ -43,6 +45,32 @@ describe('ssr: renderToString', () => { ).toBe(`
hello
`) }) + test('option components returning render from setup', async () => { + expect( + await renderToString( + createApp({ + setup() { + const msg = ref('hello') + return () => h('div', msg.value) + } + }) + ) + ).toBe(`
hello
`) + }) + + test('setup components returning render from setup', async () => { + expect( + await renderToString( + createApp( + defineComponent((props: {}) => { + const msg = ref('hello') + return () => h('div', msg.value) + }) + ) + ) + ).toBe(`
hello
`) + }) + test('optimized components', async () => { expect( await renderToString( diff --git a/packages/server-renderer/src/renderToString.ts b/packages/server-renderer/src/renderToString.ts index 265fb2c6503..599f6b34510 100644 --- a/packages/server-renderer/src/renderToString.ts +++ b/packages/server-renderer/src/renderToString.ts @@ -177,7 +177,7 @@ function renderComponentSubTree( if (isFunction(comp)) { renderVNode(push, renderComponentRoot(instance), instance) } else { - if (!comp.ssrRender && !comp.render && isString(comp.template)) { + if (!instance.render && !comp.ssrRender && isString(comp.template)) { comp.ssrRender = ssrCompile(comp.template, instance) } @@ -187,7 +187,7 @@ function renderComponentSubTree( setCurrentRenderingInstance(instance) comp.ssrRender(instance.proxy, push, instance) setCurrentRenderingInstance(null) - } else if (comp.render) { + } else if (instance.render) { renderVNode(push, renderComponentRoot(instance), instance) } else { throw new Error(