Kaynağa Gözat

chore(runtime-core): warn if use a non-ref to hold the element reference in DEV (#12051)

close #12029
edison 1 yıl önce
ebeveyn
işleme
10a46f43c0

+ 1 - 0
packages/runtime-core/__tests__/rendererTemplateRef.spec.ts

@@ -217,6 +217,7 @@ describe('api: template refs', () => {
     }
     render(h(Comp), root)
     expect(state.refKey).toBe(root.children[0])
+    expect('Template ref "refKey" used on a non-ref value').toHaveBeenWarned()
   })
 
   test('multiple root refs', () => {

+ 11 - 2
packages/runtime-core/src/rendererTemplateRef.ts

@@ -69,8 +69,17 @@ export function setRef(
     setupState === EMPTY_OBJ
       ? () => false
       : (key: string) => {
-          if (__DEV__ && knownTemplateRefs.has(rawSetupState[key] as any)) {
-            return false
+          if (__DEV__) {
+            if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {
+              warn(
+                `Template ref "${key}" used on a non-ref value. ` +
+                  `It will not work in the production build.`,
+              )
+            }
+
+            if (knownTemplateRefs.has(rawSetupState[key] as any)) {
+              return false
+            }
           }
           return hasOwn(rawSetupState, key)
         }