From: edison Date: Fri, 11 Oct 2024 02:53:45 +0000 (+0800) Subject: chore(runtime-core): warn if use a non-ref to hold the element reference in DEV ... X-Git-Tag: v3.5.12~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10a46f43c0d41f1e38616042d38b087c0ec1c829;p=thirdparty%2Fvuejs%2Fcore.git chore(runtime-core): warn if use a non-ref to hold the element reference in DEV (#12051) close #12029 --- 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) }