From 10a46f43c0d41f1e38616042d38b087c0ec1c829 Mon Sep 17 00:00:00 2001 From: edison Date: Fri, 11 Oct 2024 10:53:45 +0800 Subject: [PATCH] chore(runtime-core): warn if use a non-ref to hold the element reference in DEV (#12051) close #12029 --- .../__tests__/rendererTemplateRef.spec.ts | 1 + packages/runtime-core/src/rendererTemplateRef.ts | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts b/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts index 799108dca8..64cb9c6301 100644 --- a/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts +++ b/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', () => { diff --git a/packages/runtime-core/src/rendererTemplateRef.ts b/packages/runtime-core/src/rendererTemplateRef.ts index 1ffe303579..bffe1a2532 100644 --- a/packages/runtime-core/src/rendererTemplateRef.ts +++ b/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) } -- 2.47.3