diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 556d158a244..e30f87890d0 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -939,6 +939,7 @@ export function handleSetupResult( instance.devtoolsRawSetupState = setupResult } instance.setupState = proxyRefs(setupResult) + instance.setupState.__v__setupResult = setupResult if (__DEV__) { exposeSetupStateOnRenderContext(instance) } diff --git a/packages/runtime-core/src/helpers/useTemplateRef.ts b/packages/runtime-core/src/helpers/useTemplateRef.ts index 58c109a9246..b15d52e6fd5 100644 --- a/packages/runtime-core/src/helpers/useTemplateRef.ts +++ b/packages/runtime-core/src/helpers/useTemplateRef.ts @@ -8,6 +8,8 @@ export function useTemplateRef( ): Readonly> { const i = getCurrentInstance() const r = shallowRef(null) + // @ts-expect-error + r.__v__TemplateRef = true if (i) { const refs = i.refs === EMPTY_OBJ ? (i.refs = {}) : i.refs diff --git a/packages/runtime-core/src/rendererTemplateRef.ts b/packages/runtime-core/src/rendererTemplateRef.ts index 647ce1fb42f..d50d37a2fd2 100644 --- a/packages/runtime-core/src/rendererTemplateRef.ts +++ b/packages/runtime-core/src/rendererTemplateRef.ts @@ -96,7 +96,16 @@ export function setRef( if (_isString) { refs[ref] = [refValue] if (hasOwn(setupState, ref)) { - setupState[ref] = refs[ref] + if ( + // @ts-expect-error + setupState.__v__setupResult[ref] && + // @ts-expect-error + setupState.__v__setupResult[ref].__v__TemplateRef + ) { + // cannot update TemplateRef + } else { + setupState[ref] = value + } } } else { ref.value = [refValue] @@ -109,7 +118,16 @@ export function setRef( } else if (_isString) { refs[ref] = value if (hasOwn(setupState, ref)) { - setupState[ref] = value + if ( + // @ts-expect-error + setupState.__v__setupResult[ref] && + // @ts-expect-error + setupState.__v__setupResult[ref].__v__TemplateRef + ) { + // cannot update TemplateRef + } else { + setupState[ref] = value + } } } else if (_isRef) { ref.value = value