From e3d08d8aa2b6933b338ec9bd0e6ea1150c74c422 Mon Sep 17 00:00:00 2001 From: equt <17521736+equt@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:49:27 +0800 Subject: [PATCH] fix(compiler-ssr): disable v-memo transform in ssr vdom fallback branch --- .../compiler-core/src/transforms/vMemo.ts | 2 +- .../__tests__/ssrComponent.spec.ts | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/compiler-core/src/transforms/vMemo.ts b/packages/compiler-core/src/transforms/vMemo.ts index 83295a45c8a..31db1448af0 100644 --- a/packages/compiler-core/src/transforms/vMemo.ts +++ b/packages/compiler-core/src/transforms/vMemo.ts @@ -16,7 +16,7 @@ const seen = new WeakSet() export const transformMemo: NodeTransform = (node, context) => { if (node.type === NodeTypes.ELEMENT) { const dir = findDir(node, 'memo') - if (!dir || seen.has(node)) { + if (!dir || seen.has(node) || context.inSSR) { return } seen.add(node) diff --git a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts index 2fde4560ec4..0a71eeefeed 100644 --- a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts @@ -317,6 +317,35 @@ describe('ssr: components', () => { `) }) + // #13724 + test('slot content with v-memo', () => { + const { code } = compile(``) + expect(code).not.toMatch(`_cache`) + expect(compile(``).code) + .toMatchInlineSnapshot(` + "const { resolveComponent: _resolveComponent, withCtx: _withCtx, createVNode: _createVNode } = require("vue") + const { ssrRenderComponent: _ssrRenderComponent } = require("vue/server-renderer") + + return function ssrRender(_ctx, _push, _parent, _attrs) { + const _component_foo = _resolveComponent("foo") + const _component_bar = _resolveComponent("bar") + + _push(_ssrRenderComponent(_component_foo, _attrs, { + default: _withCtx((_, _push, _parent, _scopeId) => { + if (_push) { + _push(_ssrRenderComponent(_component_bar, null, null, _parent, _scopeId)) + } else { + return [ + _createVNode(_component_bar) + ] + } + }), + _: 1 /* STABLE */ + }, _parent)) + }" + `) + }) + describe('built-in fallthroughs', () => { test('transition', () => { expect(compile(`
`).code)