From 5a77b2a0aae3375985a6e6eae11593cb4a2a5eab Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 22 May 2025 11:17:17 +0800 Subject: [PATCH] chore: track KeepAlive child as block inside v-for --- packages/compiler-core/src/transforms/vFor.ts | 5 ++++- .../__tests__/rendererOptimizedMode.spec.ts | 13 ++++++++----- packages/runtime-core/src/renderer.ts | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts index 0dca0ba9ab..8aba1f2c1b 100644 --- a/packages/compiler-core/src/transforms/vFor.ts +++ b/packages/compiler-core/src/transforms/vFor.ts @@ -42,6 +42,7 @@ import { import { FRAGMENT, IS_MEMO_SAME, + KEEP_ALIVE, OPEN_BLOCK, RENDER_LIST, } from '../runtimeHelpers' @@ -208,7 +209,9 @@ export const transformFor: NodeTransform = createStructuralDirectiveTransform( ) } } - childBlock.isBlock = !isStableFragment + // track KeepAlive child as block + childBlock.isBlock = + childBlock.tag === KEEP_ALIVE || !isStableFragment if (childBlock.isBlock) { helper(OPEN_BLOCK) helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent)) diff --git a/packages/runtime-core/__tests__/rendererOptimizedMode.spec.ts b/packages/runtime-core/__tests__/rendererOptimizedMode.spec.ts index 7587ecfcba..f6fd16692c 100644 --- a/packages/runtime-core/__tests__/rendererOptimizedMode.spec.ts +++ b/packages/runtime-core/__tests__/rendererOptimizedMode.spec.ts @@ -1431,11 +1431,14 @@ describe('renderer: optimized mode', () => { Fragment, null, renderList(1, () => { - return createVNode( - KeepAlive, - null, - [(openBlock(), createBlock(view.value))], - 1024 /* DYNAMIC_SLOTS */, + return ( + openBlock(), + createBlock( + KeepAlive, + { include: [] }, + [(openBlock(), createBlock(view.value))], + 1024 /* DYNAMIC_SLOTS */, + ) ) }), 64 /* STABLE_FRAGMENT */, diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 23c0f447d1..7b39aa917a 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -2110,7 +2110,7 @@ function baseCreateRenderer( } if (shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE) { - ;(vnode.component!.parent!.ctx as KeepAliveContext).deactivate(vnode) + ;(parentComponent!.ctx as KeepAliveContext).deactivate(vnode) return } -- 2.47.2