From: daiwei Date: Wed, 15 Oct 2025 08:40:26 +0000 (+0800) Subject: fix(createKeyedFragment): improve insertion handling and reset state X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b0b5b7b209a2d7e26b9371ff736b71e6987075f9;p=thirdparty%2Fvuejs%2Fcore.git fix(createKeyedFragment): improve insertion handling and reset state --- diff --git a/packages/runtime-vapor/src/apiCreateFragment.ts b/packages/runtime-vapor/src/apiCreateFragment.ts index d4bb876368..a1b3fe2976 100644 --- a/packages/runtime-vapor/src/apiCreateFragment.ts +++ b/packages/runtime-vapor/src/apiCreateFragment.ts @@ -1,11 +1,29 @@ -import type { Block, BlockFn } from './block' +import { type Block, type BlockFn, insert } from './block' +import { advanceHydrationNode, isHydrating } from './dom/hydration' import { DynamicFragment } from './fragment' +import { + insertionAnchor, + insertionParent, + resetInsertionState, +} from './insertionState' import { renderEffect } from './renderEffect' export function createKeyedFragment(key: () => any, render: BlockFn): Block { + const _insertionParent = insertionParent + const _insertionAnchor = insertionAnchor + if (!isHydrating) resetInsertionState() + const frag = __DEV__ ? new DynamicFragment('keyed') : new DynamicFragment() renderEffect(() => { frag.update(render, key()) }) + + if (!isHydrating) { + if (_insertionParent) insert(frag, _insertionParent, _insertionAnchor) + } else { + if (_insertionAnchor !== undefined) { + advanceHydrationNode(_insertionParent!) + } + } return frag }