]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(ssr): render components returning render function from setup (#720)
authorDmitry Sharshakov <d3dx12.xx@gmail.com>
Sat, 15 Feb 2020 16:11:55 +0000 (19:11 +0300)
committerGitHub <noreply@github.com>
Sat, 15 Feb 2020 16:11:55 +0000 (11:11 -0500)
packages/server-renderer/__tests__/renderToString.spec.ts
packages/server-renderer/src/renderToString.ts

index eb27c4b08be5d66cdaadc67e95f4cbd0cface972..ed60dcaeb8d13f397f0cc964b5175d44742f4fcb 100644 (file)
@@ -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(`<div>hello</div>`)
     })
 
+    test('option components returning render from setup', async () => {
+      expect(
+        await renderToString(
+          createApp({
+            setup() {
+              const msg = ref('hello')
+              return () => h('div', msg.value)
+            }
+          })
+        )
+      ).toBe(`<div>hello</div>`)
+    })
+
+    test('setup components returning render from setup', async () => {
+      expect(
+        await renderToString(
+          createApp(
+            defineComponent((props: {}) => {
+              const msg = ref('hello')
+              return () => h('div', msg.value)
+            })
+          )
+        )
+      ).toBe(`<div>hello</div>`)
+    })
+
     test('optimized components', async () => {
       expect(
         await renderToString(
index 265fb2c650345ab0c8e984b162cb1ae78fad7e0a..599f6b34510914f7cb0fc5de1b0acfe22832580f 100644 (file)
@@ -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(