From: edison Date: Mon, 1 Dec 2025 07:20:57 +0000 (+0800) Subject: refactor: introduce `setAsyncRef` on `DynamicFragment` for explicit async component... X-Git-Tag: v3.6.0-alpha.6~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3db1b2e8c024889048bfd16e9115dacc0dde8b1d;p=thirdparty%2Fvuejs%2Fcore.git refactor: introduce `setAsyncRef` on `DynamicFragment` for explicit async component ref assignment. (#14153) --- diff --git a/packages/runtime-vapor/src/apiDefineAsyncComponent.ts b/packages/runtime-vapor/src/apiDefineAsyncComponent.ts index 4859017769..0ee285d4c2 100644 --- a/packages/runtime-vapor/src/apiDefineAsyncComponent.ts +++ b/packages/runtime-vapor/src/apiDefineAsyncComponent.ts @@ -197,8 +197,7 @@ function createInnerComp( if ($transition) setTransitionHooks(instance, $transition) // set ref - // @ts-expect-error - frag && frag.setRef && frag.setRef(instance) + frag && frag.setAsyncRef && frag.setAsyncRef(instance) return instance } diff --git a/packages/runtime-vapor/src/apiTemplateRef.ts b/packages/runtime-vapor/src/apiTemplateRef.ts index 33784d6700..328748feb7 100644 --- a/packages/runtime-vapor/src/apiTemplateRef.ts +++ b/packages/runtime-vapor/src/apiTemplateRef.ts @@ -62,13 +62,12 @@ export function setRef( return } - const isVaporComp = isVaporComponent(el) - if (isVaporComp && isAsyncWrapper(el as VaporComponentInstance)) { - const i = el as VaporComponentInstance - const frag = i.block as DynamicFragment - // async component not resolved yet - if (!i.type.__asyncResolved) { - frag.setRef = i => setRef(instance, i, ref, oldRef, refFor) + if (isVaporComponent(el) && isAsyncWrapper(el)) { + const frag = el.block as DynamicFragment + // async component not resolved yet, register ref setter + // it will be called when the async component is resolved + if (!el.type.__asyncResolved) { + frag.setAsyncRef = i => setRef(instance, i, ref, oldRef, refFor) return } diff --git a/packages/runtime-vapor/src/fragment.ts b/packages/runtime-vapor/src/fragment.ts index 287980ed4b..ed0b64e424 100644 --- a/packages/runtime-vapor/src/fragment.ts +++ b/packages/runtime-vapor/src/fragment.ts @@ -83,6 +83,9 @@ export class DynamicFragment extends VaporFragment { // fallthrough attrs attrs?: Record + // set ref for async wrapper + setAsyncRef?: (instance: VaporComponentInstance) => void + // get the kept-alive scope when used in keep-alive getScope?: (key: any) => EffectScope | undefined