From e0d19a695316a8a459274874d304872fea384851 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 26 Jun 2020 10:19:07 -0400 Subject: [PATCH] fix(runtime-core): always check props presence in public instance proxy When the there are props merged from mixins or extends, the component itself may not have a props property. fix #1236 where merged props are not exposed in production --- packages/runtime-core/src/componentProxy.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/runtime-core/src/componentProxy.ts b/packages/runtime-core/src/componentProxy.ts index f1aeece4e55..400e5521583 100644 --- a/packages/runtime-core/src/componentProxy.ts +++ b/packages/runtime-core/src/componentProxy.ts @@ -222,6 +222,7 @@ export const PublicInstanceProxyHandlers: ProxyHandler = { // is the multiple hasOwn() calls. It's much faster to do a simple property // access on a plain object, so we use an accessCache object (with null // prototype) to memoize what access type a key corresponds to. + let normalizedProps if (key[0] !== '$') { const n = accessCache![key] if (n !== undefined) { @@ -245,8 +246,8 @@ export const PublicInstanceProxyHandlers: ProxyHandler = { } else if ( // only cache other properties when instance has declared (thus stable) // props - type.props && - hasOwn(normalizePropsOptions(type)[0]!, key) + (normalizedProps = normalizePropsOptions(type)[0]) && + hasOwn(normalizedProps, key) ) { accessCache![key] = AccessTypes.PROPS return props![key] @@ -352,11 +353,13 @@ export const PublicInstanceProxyHandlers: ProxyHandler = { }: ComponentRenderContext, key: string ) { + let normalizedProps return ( accessCache![key] !== undefined || (data !== EMPTY_OBJ && hasOwn(data, key)) || (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) || - (type.props && hasOwn(normalizePropsOptions(type)[0]!, key)) || + ((normalizedProps = normalizePropsOptions(type)[0]) && + hasOwn(normalizedProps, key)) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key)