import { type ShallowRef, readonly, shallowRef } from '@vue/reactivity'
-import { getCurrentInstance } from '../component'
+import { type Data, getCurrentInstance } from '../component'
import { warn } from '../warning'
import { EMPTY_OBJ } from '@vue/shared'
const r = shallowRef(null)
if (i) {
const refs = i.refs === EMPTY_OBJ ? (i.refs = {}) : i.refs
- let desc: PropertyDescriptor | undefined
- if (
- __DEV__ &&
- (desc = Object.getOwnPropertyDescriptor(refs, key)) &&
- !desc.configurable
- ) {
+ if (__DEV__ && isUseTemplateRefKey(refs, key)) {
warn(`useTemplateRef('${key}') already exists.`)
} else {
Object.defineProperty(refs, key, {
}
return ret
}
+
+export function isUseTemplateRefKey(refs: Data, key: string): boolean {
+ let desc: PropertyDescriptor | undefined
+ if (
+ __DEV__ &&
+ (desc = Object.getOwnPropertyDescriptor(refs, key)) &&
+ !desc.configurable
+ ) {
+ return true
+ }
+
+ return false
+}
import type { SchedulerJob } from './scheduler'
import { queuePostRenderEffect } from './renderer'
import { type ComponentOptions, getComponentPublicInstance } from './component'
-import { knownTemplateRefs } from './helpers/useTemplateRef'
+import {
+ isUseTemplateRefKey,
+ knownTemplateRefs,
+} from './helpers/useTemplateRef'
/**
* Function for handling a template ref
return false
}
}
+
+ // skip setting up ref if the key is from useTemplateRef
+ if (isUseTemplateRefKey(refs, key)) {
+ return false
+ }
+
return hasOwn(rawSetupState, key)
}