From: daiwei Date: Mon, 16 Jun 2025 02:53:21 +0000 (+0800) Subject: chore: Merge branch 'edison/fix/resetInsertion' into edison/testVapor X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=829c8164cad1e4660154daf8a90766fabe145277;p=thirdparty%2Fvuejs%2Fcore.git chore: Merge branch 'edison/fix/resetInsertion' into edison/testVapor --- 829c8164cad1e4660154daf8a90766fabe145277 diff --cc packages/runtime-vapor/src/apiCreateIf.ts index 3e370592b3,f573a61b16..ba13df83d7 --- a/packages/runtime-vapor/src/apiCreateIf.ts +++ b/packages/runtime-vapor/src/apiCreateIf.ts @@@ -1,6 -1,5 +1,6 @@@ +import { IF_ANCHOR_LABEL } from '@vue/shared' import { type Block, type BlockFn, DynamicFragment, insert } from './block' - import { isHydrating } from './dom/hydration' + import { isHydrating, locateHydrationNode } from './dom/hydration' import { insertionAnchor, insertionParent, @@@ -16,7 -15,11 +16,11 @@@ export function createIf ): Block { const _insertionParent = insertionParent const _insertionAnchor = insertionAnchor - if (!isHydrating) resetInsertionState() + if (isHydrating) { - locateHydrationNode() ++ locateHydrationNode(true) + } else { + resetInsertionState() + } let frag: Block if (once) { diff --cc packages/runtime-vapor/src/block.ts index c788ce8855,b782afd38d..6fcec466a3 --- a/packages/runtime-vapor/src/block.ts +++ b/packages/runtime-vapor/src/block.ts @@@ -218,9 -126,10 +218,9 @@@ export function insert } else { // fragment if (block.insert) { - // TODO handle hydration for vdom interop -- block.insert(parent, anchor) ++ block.insert(parent, anchor, (block as TransitionBlock).$transition) } else { - insert(block.nodes, parent, anchor) + insert(block.nodes, parent, anchor, parentSuspense) } if (block.anchor) insert(block.anchor, parent, anchor) } diff --cc packages/runtime-vapor/src/componentSlots.ts index b250ecef49,100c99cdb8..2afe74f9c7 --- a/packages/runtime-vapor/src/componentSlots.ts +++ b/packages/runtime-vapor/src/componentSlots.ts @@@ -123,9 -98,13 +123,13 @@@ export function createSlot ): Block { const _insertionParent = insertionParent const _insertionAnchor = insertionAnchor - if (!isHydrating) resetInsertionState() + if (isHydrating) { - locateHydrationNode() ++ locateHydrationNode(true) + } else { + resetInsertionState() + } - const instance = currentInstance as VaporComponentInstance + const instance = i || (currentInstance as VaporComponentInstance) const rawSlots = instance.rawSlots const slotProps = rawProps ? new Proxy(rawProps, rawPropsProxyHandlers) diff --cc packages/runtime-vapor/src/vdomInterop.ts index 33680ba7f8,77228fd72a..4a367b5d92 --- a/packages/runtime-vapor/src/vdomInterop.ts +++ b/packages/runtime-vapor/src/vdomInterop.ts @@@ -252,35 -175,17 +252,37 @@@ function createVDOMComponent internals.umt(vnode.component!, null, !!parentNode) } - frag.insert = (parentNode, anchor) => { - if (!isMounted) { - internals.mt( - vnode, - parentNode, - anchor, - parentInstance as any, - null, - undefined, - false, - ) + vnode.scopeId = parentInstance.type.__scopeId! + - frag.insert = (parentNode, anchor) => { ++ frag.insert = (parentNode, anchor, transition) => { + const prev = currentInstance + simpleSetCurrentInstance(parentInstance) + if (!isMounted || isHydrating) { ++ if (transition) setVNodeTransitionHooks(vnode, transition) ++ + if (isHydrating) { + ;( + vdomHydrateNode || + (vdomHydrateNode = ensureHydrationRenderer().hydrateNode!) + )( + currentHydrationNode!, + vnode, + parentInstance as any, + null, + null, + false, + ) + } else { + internals.mt( + vnode, + parentNode, + anchor, + parentInstance as any, + null, + undefined, + false, + ) + } onScopeDispose(unmount, true) isMounted = true } else { @@@ -293,11 -198,6 +295,10 @@@ parentInstance as any, ) } + - simpleSetCurrentInstance(prev) - + // update the fragment nodes - frag.nodes = vnode.el as Block ++ frag.nodes = [vnode.el as Node] ++ simpleSetCurrentInstance(prev) } frag.remove = unmount