From: daiwei Date: Mon, 4 Aug 2025 05:44:57 +0000 (+0800) Subject: chore: update X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5f8c1f638cb4cd9c437b09ad4f72003109f61b4d;p=thirdparty%2Fvuejs%2Fcore.git chore: update --- diff --git a/packages/runtime-vapor/src/apiCreateFor.ts b/packages/runtime-vapor/src/apiCreateFor.ts index 3104f4b030..290136101c 100644 --- a/packages/runtime-vapor/src/apiCreateFor.ts +++ b/packages/runtime-vapor/src/apiCreateFor.ts @@ -25,7 +25,6 @@ import { isHydrating, locateHydrationNode, locateVaporFragmentAnchor, - updateNextChildToHydrate, } from './dom/hydration' import { ForFragment, VaporFragment } from './fragment' import { @@ -97,16 +96,7 @@ export const createFor = ( // useSelector only let currentKey: any let parentAnchor: Node - if (isHydrating) { - parentAnchor = - locateVaporFragmentAnchor(currentHydrationNode!, FOR_ANCHOR_LABEL) || - // fallback to the fragment end anchor if in ssr slots vnode fallback - locateVaporFragmentAnchor(currentHydrationNode!, ']')! - if (__DEV__ && !parentAnchor) { - // this should not happen - throw new Error(`v-for fragment anchor node was not found.`) - } - } else { + if (!isHydrating) { parentAnchor = __DEV__ ? createComment('for') : createTextNode() } @@ -135,12 +125,19 @@ export const createFor = ( if (!isMounted) { isMounted = true for (let i = 0; i < newLength; i++) { - // TODO add tests - if (isHydrating && i > 0 && _insertionParent) { - updateNextChildToHydrate(_insertionParent) - } mount(source, i) } + + if (isHydrating) { + parentAnchor = + locateVaporFragmentAnchor(currentHydrationNode!, FOR_ANCHOR_LABEL) || + // fallback to the fragment end anchor if in ssr slots vnode fallback + locateVaporFragmentAnchor(currentHydrationNode!, ']')! + if (__DEV__ && !parentAnchor) { + // this should not happen + throw new Error(`v-for fragment anchor node was not found.`) + } + } } else { parent = parent || parentAnchor!.parentNode if (!oldLength) { @@ -473,7 +470,7 @@ export const createFor = ( } if (isHydrating) { advanceHydrationNode( - _insertionAnchor !== undefined ? _insertionParent! : parentAnchor, + _insertionAnchor !== undefined ? _insertionParent! : parentAnchor!, ) } diff --git a/packages/runtime-vapor/src/dom/hydration.ts b/packages/runtime-vapor/src/dom/hydration.ts index b070158d3c..5edf0ec5f4 100644 --- a/packages/runtime-vapor/src/dom/hydration.ts +++ b/packages/runtime-vapor/src/dom/hydration.ts @@ -73,7 +73,7 @@ export function hydrateNode(node: Node, fn: () => void): void { } export let adoptTemplate: (node: Node, template: string) => Node | null -export let locateHydrationNode: (isFragment?: boolean) => void +export let locateHydrationNode: () => void type Anchor = Comment & { // cached matching fragment end to avoid repeated traversal @@ -114,19 +114,7 @@ function adoptTemplateImpl(node: Node, template: string): Node | null { return node } -const childToHydrateMap = new WeakMap() - -export function updateNextChildToHydrate(parent: ParentNode): void { - let nextNode = childToHydrateMap.get(parent) - if (nextNode) { - nextNode = __next(nextNode) - if (nextNode) { - childToHydrateMap.set(parent, (currentHydrationNode = nextNode)) - } - } -} - -function locateHydrationNodeImpl(isFragment?: boolean): void { +function locateHydrationNodeImpl(): void { let node: Node | null // prepend / firstChild if (insertionAnchor === 0) { @@ -141,23 +129,7 @@ function locateHydrationNodeImpl(isFragment?: boolean): void { } else { node = currentHydrationNode if (insertionParent && (!node || node.parentNode !== insertionParent)) { - node = - childToHydrateMap.get(insertionParent) || - __nthChild(insertionParent, insertionParent.$dp || 0) - } - - // locate slot fragment start anchor - // if (isFragment && node && !isComment(node, '[')) { - // node = locateVaporFragmentAnchor(node, '[')! - // } else { - // while (node && isNonHydrationNode(node)) { - // node = node.nextSibling! - // } - // } - - if (insertionParent && node) { - const nextNode = node.nextSibling - if (nextNode) childToHydrateMap.set(insertionParent, nextNode) + node = __nthChild(insertionParent, insertionParent.$dp || 0) } } diff --git a/packages/runtime-vapor/src/fragment.ts b/packages/runtime-vapor/src/fragment.ts index 92b5a353c7..c4ddc92f9a 100644 --- a/packages/runtime-vapor/src/fragment.ts +++ b/packages/runtime-vapor/src/fragment.ts @@ -64,7 +64,7 @@ export class DynamicFragment extends VaporFragment { constructor(anchorLabel?: string) { super([]) if (isHydrating) { - locateHydrationNode(anchorLabel === 'slot') + locateHydrationNode() this.anchorLabel = anchorLabel } else { this.anchor =