perf(runtime-vapor): `setup()` returning object is only needed in __DEV__ (HMR) (#296)

This commit is contained in:
Rizumu Ayaka 2024-11-30 18:32:16 +08:00 committed by GitHub
parent e61cedf3fd
commit f0361bafbb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 31 additions and 25 deletions

View File

@ -55,32 +55,38 @@ export function setupComponent(instance: ComponentInternalInstance): void {
let block: Block | undefined
if (
stateOrNode &&
(stateOrNode instanceof Node ||
isArray(stateOrNode) ||
fragmentKey in stateOrNode ||
componentKey in stateOrNode)
) {
// Skip the type check for production since this is only for Dev HMR
if (__DEV__) {
if (
stateOrNode &&
(stateOrNode instanceof Node ||
isArray(stateOrNode) ||
fragmentKey in stateOrNode ||
componentKey in stateOrNode)
) {
block = stateOrNode
} else if (isObject(stateOrNode)) {
instance.setupState = proxyRefs(stateOrNode)
}
if (!block && component.render) {
pauseTracking()
block = callWithErrorHandling(
component.render,
instance,
VaporErrorCodes.RENDER_FUNCTION,
[
instance.setupState, // _ctx
shallowReadonly(props), // $props
instance.emit, // $emit
getAttrsProxy(instance), // $attrs
getSlotsProxy(instance), // $slots
],
)
resetTracking()
}
} else {
block = stateOrNode
} else if (isObject(stateOrNode)) {
instance.setupState = proxyRefs(stateOrNode)
}
if (!block && component.render) {
pauseTracking()
block = callWithErrorHandling(
component.render,
instance,
VaporErrorCodes.RENDER_FUNCTION,
[
instance.setupState, // _ctx
__DEV__ ? shallowReadonly(props) : props, // $props
instance.emit, // $emit
__DEV__ ? getAttrsProxy(instance) : instance.attrs, // $attrs
__DEV__ ? getSlotsProxy(instance) : instance.slots, // $slots
],
)
resetTracking()
}
if (!block) {