From: equt <17521736+equt@users.noreply.github.com>
Date: Thu, 21 Aug 2025 02:03:16 +0000 (+0800)
Subject: fix(compiler-ssr): disable v-memo transform in ssr vdom fallback branch (#13725)
X-Git-Tag: v3.5.19~1
X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0a202d890ff2a564b1fab51e4ac621708640818e;p=thirdparty%2Fvuejs%2Fcore.git
fix(compiler-ssr): disable v-memo transform in ssr vdom fallback branch (#13725)
close #13724
---
diff --git a/packages/compiler-core/src/transforms/vMemo.ts b/packages/compiler-core/src/transforms/vMemo.ts
index 83295a45c8..31db1448af 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 2fde4560ec..0a71eeefee 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)