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)