fix(runtime-core): check if the key is string on undefined property warning (#1731)

This commit is contained in:
Carlos Rodrigues 2020-07-29 15:06:36 +01:00 committed by GitHub
parent 848d9ce2ea
commit ce78eac8e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 4 deletions

View File

@ -217,4 +217,24 @@ describe('component: proxy', () => {
`was accessed during render but is not defined`
).not.toHaveBeenWarned()
})
test('should allow symbol to access on render', () => {
const Comp = {
render() {
if ((this as any)[Symbol.unscopables]) {
return '1'
}
return '2'
}
}
const app = createApp(Comp)
app.mount(nodeOps.createElement('div'))
expect(
`Property ${JSON.stringify(
Symbol.unscopables
)} was accessed during render ` + `but is not defined on instance.`
).toHaveBeenWarned()
})
})

View File

@ -6,7 +6,8 @@ import {
hasOwn,
isGloballyWhitelisted,
NOOP,
extend
extend,
isString
} from '@vue/shared'
import {
ReactiveEffect,
@ -286,9 +287,10 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
} else if (
__DEV__ &&
currentRenderingInstance &&
// #1091 avoid internal isRef/isVNode checks on component instance leading
// to infinite warning loop
key.indexOf('__v') !== 0
(!isString(key) ||
// #1091 avoid internal isRef/isVNode checks on component instance leading
// to infinite warning loop
key.indexOf('__v') !== 0)
) {
if (data !== EMPTY_OBJ && key[0] === '$' && hasOwn(data, key)) {
warn(