vue3-yuanma/packages/runtime-core/src/componentProxy.ts

44 lines
1.1 KiB
TypeScript
Raw Normal View History

2019-05-29 13:43:46 +08:00
import { ComponentInstance } from './component'
export const RenderProxyHandlers = {
get(target: ComponentInstance, key: string) {
const { state, props } = target
if (state.hasOwnProperty(key)) {
2019-05-29 17:36:53 +08:00
return state[key]
2019-05-29 13:43:46 +08:00
} else if (props.hasOwnProperty(key)) {
return props[key]
} else {
switch (key) {
case '$state':
return target.state
case '$props':
return target.props
case '$attrs':
return target.attrs
case '$slots':
return target.slots
case '$refs':
return target.refs
default:
break
}
}
},
set(target: ComponentInstance, key: string, value: any): boolean {
const { state } = target
if (state.hasOwnProperty(key)) {
2019-05-29 17:36:53 +08:00
state[key] = value
2019-05-29 13:43:46 +08:00
return true
} else {
if (__DEV__) {
if (key[0] === '$') {
// TODO warn attempt of mutating public property
} else if (target.props.hasOwnProperty(key)) {
// TODO warn attempt of mutating prop
}
}
}
return false
}
}