Skip to content

Commit

Permalink
fix(ssr): reset current instance (#6184)
Browse files Browse the repository at this point in the history
fix #6110
  • Loading branch information
javastation committed Sep 7, 2022
1 parent fa6556a commit 6493da5
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
20 changes: 19 additions & 1 deletion packages/server-renderer/__tests__/render.spec.ts
Expand Up @@ -20,7 +20,8 @@ import {
resolveDynamicComponent,
renderSlot,
onErrorCaptured,
onServerPrefetch
onServerPrefetch,
getCurrentInstance
} from 'vue'
import { escapeHtml } from '@vue/shared'
import { renderToString } from '../src/renderToString'
Expand Down Expand Up @@ -779,6 +780,23 @@ function testRender(type: string, render: typeof renderToString) {
).toHaveBeenWarned()
expect(`Element is missing end tag`).toHaveBeenWarned()
})

// #6110
test('reset current instance after rendering error', async () => {
const prev = getCurrentInstance()
expect(prev).toBe(null)
try {
await render(
createApp({
data() {
return { msg: null }
},
template: `<div>{{ msg.text }}</div>`
})
)
} catch {}
expect(getCurrentInstance()).toBe(prev)
})
})

test('serverPrefetch', async () => {
Expand Down
27 changes: 15 additions & 12 deletions packages/server-renderer/src/render.ts
Expand Up @@ -174,18 +174,21 @@ function renderComponentSubTree(

// set current rendering instance for asset resolution
const prev = setCurrentRenderingInstance(instance)
ssrRender(
instance.proxy,
push,
instance,
attrs,
// compiler-optimized bindings
instance.props,
instance.setupState,
instance.data,
instance.ctx
)
setCurrentRenderingInstance(prev)
try {
ssrRender(
instance.proxy,
push,
instance,
attrs,
// compiler-optimized bindings
instance.props,
instance.setupState,
instance.data,
instance.ctx
)
} finally {
setCurrentRenderingInstance(prev)
}
} else if (instance.render && instance.render !== NOOP) {
renderVNode(
push,
Expand Down

0 comments on commit 6493da5

Please sign in to comment.