From 2a9e9a40963a852238adc4c61b86d0c48e7131fa Mon Sep 17 00:00:00 2001 From: edison Date: Fri, 13 May 2022 16:52:19 +0800 Subject: [PATCH] refactor(runtime-core): extract function `isReservedPrefix` (#3265) * chore(runtime-core): extract function isReservedKey * chore: improve code Co-authored-by: Evan You --- packages/runtime-core/src/componentOptions.ts | 5 +++-- packages/runtime-core/src/componentPublicInstance.ts | 10 ++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index ed95174b187..c482d051965 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -58,7 +58,8 @@ import { EmitsOptions, EmitsToProps } from './componentEmits' import { Directive } from './directives' import { CreateComponentPublicInstance, - ComponentPublicInstance + ComponentPublicInstance, + isReservedPrefix } from './componentPublicInstance' import { warn } from './warning' import { VNodeChild } from './vnode' @@ -681,7 +682,7 @@ export function applyOptions(instance: ComponentInternalInstance) { for (const key in data) { checkDuplicateProperties!(OptionTypes.DATA, key) // expose data on ctx during dev - if (key[0] !== '$' && key[0] !== '_') { + if (!isReservedPrefix(key[0])) { Object.defineProperty(ctx, key, { configurable: true, enumerable: true, diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 33e8ce5fac0..986a2e79b55 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -274,6 +274,8 @@ export interface ComponentRenderContext { _: ComponentInternalInstance } +export const isReservedPrefix = (key: string) => key === '_' || key === '$' + export const PublicInstanceProxyHandlers: ProxyHandler = { get({ _: instance }: ComponentRenderContext, key: string) { const { ctx, setupState, data, props, accessCache, type, appContext } = @@ -385,11 +387,7 @@ export const PublicInstanceProxyHandlers: ProxyHandler = { // to infinite warning loop key.indexOf('__v') !== 0) ) { - if ( - data !== EMPTY_OBJ && - (key[0] === '$' || key[0] === '_') && - hasOwn(data, key) - ) { + if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { warn( `Property ${JSON.stringify( key @@ -571,7 +569,7 @@ export function exposeSetupStateOnRenderContext( const { ctx, setupState } = instance Object.keys(toRaw(setupState)).forEach(key => { if (!setupState.__isScriptSetup) { - if (key[0] === '$' || key[0] === '_') { + if (isReservedPrefix(key[0])) { warn( `setup() return property ${JSON.stringify( key