Skip to content

Commit 3db1b2e

Browse files
authored
refactor: introduce setAsyncRef on DynamicFragment for explicit async component ref assignment. (#14153)
1 parent bd087ad commit 3db1b2e

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

packages/runtime-vapor/src/apiDefineAsyncComponent.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,7 @@ function createInnerComp(
197197
if ($transition) setTransitionHooks(instance, $transition)
198198

199199
// set ref
200-
// @ts-expect-error
201-
frag && frag.setRef && frag.setRef(instance)
200+
frag && frag.setAsyncRef && frag.setAsyncRef(instance)
202201

203202
return instance
204203
}

packages/runtime-vapor/src/apiTemplateRef.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,12 @@ export function setRef(
6262
return
6363
}
6464

65-
const isVaporComp = isVaporComponent(el)
66-
if (isVaporComp && isAsyncWrapper(el as VaporComponentInstance)) {
67-
const i = el as VaporComponentInstance
68-
const frag = i.block as DynamicFragment
69-
// async component not resolved yet
70-
if (!i.type.__asyncResolved) {
71-
frag.setRef = i => setRef(instance, i, ref, oldRef, refFor)
65+
if (isVaporComponent(el) && isAsyncWrapper(el)) {
66+
const frag = el.block as DynamicFragment
67+
// async component not resolved yet, register ref setter
68+
// it will be called when the async component is resolved
69+
if (!el.type.__asyncResolved) {
70+
frag.setAsyncRef = i => setRef(instance, i, ref, oldRef, refFor)
7271
return
7372
}
7473

packages/runtime-vapor/src/fragment.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ export class DynamicFragment extends VaporFragment {
8383
// fallthrough attrs
8484
attrs?: Record<string, any>
8585

86+
// set ref for async wrapper
87+
setAsyncRef?: (instance: VaporComponentInstance) => void
88+
8689
// get the kept-alive scope when used in keep-alive
8790
getScope?: (key: any) => EffectScope | undefined
8891

0 commit comments

Comments
 (0)