]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(useTemplateRef): don't update setup ref for useTemplateRef key
authordaiwei <daiwei521@126.com>
Tue, 21 Jan 2025 02:24:21 +0000 (10:24 +0800)
committerdaiwei <daiwei521@126.com>
Tue, 21 Jan 2025 02:24:21 +0000 (10:24 +0800)
packages/runtime-core/src/helpers/useTemplateRef.ts
packages/runtime-core/src/rendererTemplateRef.ts

index 4cb10ea8139e462c9d9582c62f00531f45563240..025c3e90d8320cbd0fd768cd98ff49c3eb3d8cc2 100644 (file)
@@ -1,5 +1,5 @@
 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'
 
@@ -12,12 +12,7 @@ export function useTemplateRef<T = unknown, Keys extends string = string>(
   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, {
@@ -38,3 +33,16 @@ export function useTemplateRef<T = unknown, Keys extends string = string>(
   }
   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
+}
index ca21030dc35d851a7c293e4d1dea84b3c8eacc7d..664cea6e687bf91ccb40939224633b8847edd2ce 100644 (file)
@@ -16,7 +16,10 @@ import { ErrorCodes, callWithErrorHandling } from './errorHandling'
 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
@@ -91,6 +94,12 @@ export function setRef(
               return false
             }
           }
+
+          // skip setting up ref if the key is from useTemplateRef
+          if (isUseTemplateRefKey(refs, key)) {
+            return false
+          }
+
           return hasOwn(rawSetupState, key)
         }