From: daiwei Date: Sun, 22 Jun 2025 02:16:02 +0000 (+0800) Subject: fix(hydration): prevent lazy hydration for updated components X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=028aaae7a0f933d35992d9136a287a1f304f9ed0;p=thirdparty%2Fvuejs%2Fcore.git fix(hydration): prevent lazy hydration for updated components --- diff --git a/packages/runtime-core/src/apiAsyncComponent.ts b/packages/runtime-core/src/apiAsyncComponent.ts index cb675f06e4..25e6fa481c 100644 --- a/packages/runtime-core/src/apiAsyncComponent.ts +++ b/packages/runtime-core/src/apiAsyncComponent.ts @@ -123,28 +123,28 @@ export function defineAsyncComponent< __asyncHydrate(el, instance, hydrate) { let patched = false + ;(instance.bu || (instance.bu = [])).push(() => (patched = true)) + const performHydrate = () => { + // skip hydration if the component has been patched + if (__DEV__ && patched) { + warn( + `Skipping lazy hydration for component '${getComponentName(resolvedComp!) || resolvedComp!.__file}': ` + + `it was updated before lazy hydration performed.`, + ) + return + } + hydrate() + } const doHydrate = hydrateStrategy ? () => { - const performHydrate = () => { - // skip hydration if the component has been patched - if (__DEV__ && patched) { - warn( - `Skipping lazy hydration for component '${getComponentName(resolvedComp!)}': ` + - `it was updated before lazy hydration performed.`, - ) - return - } - hydrate() - } const teardown = hydrateStrategy(performHydrate, cb => forEachElement(el, cb), ) if (teardown) { ;(instance.bum || (instance.bum = [])).push(teardown) } - ;(instance.u || (instance.u = [])).push(() => (patched = true)) } - : hydrate + : performHydrate if (resolvedComp) { doHydrate() } else {