refactor(componentProxy): simplify proxy handling (#214)
This commit is contained in:
parent
5d98c51b74
commit
78d1821e24
@ -36,6 +36,18 @@ export type ComponentPublicInstance<
|
|||||||
ExtractComputedReturns<C> &
|
ExtractComputedReturns<C> &
|
||||||
M
|
M
|
||||||
|
|
||||||
|
const publicPropertiesMap = {
|
||||||
|
$data: 'data',
|
||||||
|
$props: 'propsProxy',
|
||||||
|
$attrs: 'attrs',
|
||||||
|
$slots: 'slots',
|
||||||
|
$refs: 'refs',
|
||||||
|
$parent: 'parent',
|
||||||
|
$root: 'root',
|
||||||
|
$emit: 'emit',
|
||||||
|
$options: 'type'
|
||||||
|
}
|
||||||
|
|
||||||
export const PublicInstanceProxyHandlers = {
|
export const PublicInstanceProxyHandlers = {
|
||||||
get(target: ComponentInternalInstance, key: string) {
|
get(target: ComponentInternalInstance, key: string) {
|
||||||
const { renderContext, data, props, propsProxy } = target
|
const { renderContext, data, props, propsProxy } = target
|
||||||
@ -46,44 +58,23 @@ export const PublicInstanceProxyHandlers = {
|
|||||||
} else if (hasOwn(props, key)) {
|
} else if (hasOwn(props, key)) {
|
||||||
// return the value from propsProxy for ref unwrapping and readonly
|
// return the value from propsProxy for ref unwrapping and readonly
|
||||||
return propsProxy![key]
|
return propsProxy![key]
|
||||||
} else {
|
} else if (key === '$el') {
|
||||||
// TODO simplify this?
|
return target.vnode.el
|
||||||
|
} else if (hasOwn(publicPropertiesMap, key)) {
|
||||||
|
return target[publicPropertiesMap[key]]
|
||||||
|
}
|
||||||
|
// methods are only exposed when options are supported
|
||||||
|
if (__FEATURE_OPTIONS__) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case '$data':
|
case '$forceUpdate':
|
||||||
return data
|
return target.update
|
||||||
case '$props':
|
case '$nextTick':
|
||||||
return propsProxy
|
return nextTick
|
||||||
case '$attrs':
|
case '$watch':
|
||||||
return target.attrs
|
return instanceWatch.bind(target)
|
||||||
case '$slots':
|
|
||||||
return target.slots
|
|
||||||
case '$refs':
|
|
||||||
return target.refs
|
|
||||||
case '$parent':
|
|
||||||
return target.parent
|
|
||||||
case '$root':
|
|
||||||
return target.root
|
|
||||||
case '$emit':
|
|
||||||
return target.emit
|
|
||||||
case '$el':
|
|
||||||
return target.vnode.el
|
|
||||||
case '$options':
|
|
||||||
return target.type
|
|
||||||
default:
|
|
||||||
// methods are only exposed when options are supported
|
|
||||||
if (__FEATURE_OPTIONS__) {
|
|
||||||
switch (key) {
|
|
||||||
case '$forceUpdate':
|
|
||||||
return target.update
|
|
||||||
case '$nextTick':
|
|
||||||
return nextTick
|
|
||||||
case '$watch':
|
|
||||||
return instanceWatch.bind(target)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return target.user[key]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return target.user[key]
|
||||||
},
|
},
|
||||||
// this trap is only called in browser-compiled render functions that use
|
// this trap is only called in browser-compiled render functions that use
|
||||||
// `with (this) {}`
|
// `with (this) {}`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user