fix(runtime-core): fix component public instance has check for accessed non-existent properties

close #4962
This commit is contained in:
Evan You 2021-11-25 18:15:06 +08:00
parent 89b2f924fc
commit aac0466cb8
2 changed files with 8 additions and 3 deletions

View File

@ -195,6 +195,11 @@ describe('component: proxy', () => {
expect('$foobar' in instanceProxy).toBe(false)
expect('baz' in instanceProxy).toBe(false)
// #4962 triggering getter should not cause non-existent property to
// pass the has check
instanceProxy.baz
expect('baz' in instanceProxy).toBe(false)
// set non-existent (goes into proxyTarget sink)
instanceProxy.baz = 1
expect('baz' in instanceProxy).toBe(true)

View File

@ -248,11 +248,11 @@ if (__COMPAT__) {
}
const enum AccessTypes {
OTHER,
SETUP,
DATA,
PROPS,
CONTEXT,
OTHER
CONTEXT
}
export interface ComponentRenderContext {
@ -437,7 +437,7 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
) {
let normalizedProps
return (
accessCache![key] !== undefined ||
!!accessCache![key] ||
(data !== EMPTY_OBJ && hasOwn(data, key)) ||
(setupState !== EMPTY_OBJ && hasOwn(setupState, key)) ||
((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||