From: Evan You Date: Fri, 26 Jun 2020 14:19:07 +0000 (-0400) Subject: fix(runtime-core): always check props presence in public instance proxy X-Git-Tag: v3.0.0-beta.16~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0d19a695316a8a459274874d304872fea384851;p=thirdparty%2Fvuejs%2Fcore.git 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 --- diff --git a/packages/runtime-core/src/componentProxy.ts b/packages/runtime-core/src/componentProxy.ts index f1aeece4e5..400e552158 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)