Skip to content

Commit e3d08d8

Browse files
committed
fix(compiler-ssr): disable v-memo transform in ssr vdom fallback branch
1 parent c875019 commit e3d08d8

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

packages/compiler-core/src/transforms/vMemo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const seen = new WeakSet()
1616
export const transformMemo: NodeTransform = (node, context) => {
1717
if (node.type === NodeTypes.ELEMENT) {
1818
const dir = findDir(node, 'memo')
19-
if (!dir || seen.has(node)) {
19+
if (!dir || seen.has(node) || context.inSSR) {
2020
return
2121
}
2222
seen.add(node)

packages/compiler-ssr/__tests__/ssrComponent.spec.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,35 @@ describe('ssr: components', () => {
317317
`)
318318
})
319319

320+
// #13724
321+
test('slot content with v-memo', () => {
322+
const { code } = compile(`<foo><bar v-memo="[]" /></foo>`)
323+
expect(code).not.toMatch(`_cache`)
324+
expect(compile(`<foo><bar v-memo="[]" /></foo>`).code)
325+
.toMatchInlineSnapshot(`
326+
"const { resolveComponent: _resolveComponent, withCtx: _withCtx, createVNode: _createVNode } = require("vue")
327+
const { ssrRenderComponent: _ssrRenderComponent } = require("vue/server-renderer")
328+
329+
return function ssrRender(_ctx, _push, _parent, _attrs) {
330+
const _component_foo = _resolveComponent("foo")
331+
const _component_bar = _resolveComponent("bar")
332+
333+
_push(_ssrRenderComponent(_component_foo, _attrs, {
334+
default: _withCtx((_, _push, _parent, _scopeId) => {
335+
if (_push) {
336+
_push(_ssrRenderComponent(_component_bar, null, null, _parent, _scopeId))
337+
} else {
338+
return [
339+
_createVNode(_component_bar)
340+
]
341+
}
342+
}),
343+
_: 1 /* STABLE */
344+
}, _parent))
345+
}"
346+
`)
347+
})
348+
320349
describe('built-in fallthroughs', () => {
321350
test('transition', () => {
322351
expect(compile(`<transition><div/></transition>`).code)

0 commit comments

Comments
 (0)