fix(runtime-vapor): prevent mounting functional components as virtual DOM

This commit is contained in:
zhiyuanzmj 2025-05-26 20:08:55 +08:00
parent 1ef6e6edb7
commit d2c6e2d5b5
1 changed files with 4 additions and 3 deletions

View File

@ -144,8 +144,9 @@ export function createComponent(
locateHydrationNode() locateHydrationNode()
} }
const isFnComponent = isFunction(component)
// vdom interop enabled and component is not an explicit vapor component // vdom interop enabled and component is not an explicit vapor component
if (appContext.vapor && !component.__vapor) { if (appContext.vapor && !isFnComponent && !component.__vapor) {
const frag = appContext.vapor.vdomMount( const frag = appContext.vapor.vdomMount(
component as any, component as any,
rawProps, rawProps,
@ -199,7 +200,7 @@ export function createComponent(
setupPropsValidation(instance) setupPropsValidation(instance)
} }
const setupFn = isFunction(component) ? component : component.setup const setupFn = isFnComponent ? component : component.setup
const setupResult = setupFn const setupResult = setupFn
? callWithErrorHandling(setupFn, instance, ErrorCodes.SETUP_FUNCTION, [ ? callWithErrorHandling(setupFn, instance, ErrorCodes.SETUP_FUNCTION, [
instance.props, instance.props,
@ -208,7 +209,7 @@ export function createComponent(
: EMPTY_OBJ : EMPTY_OBJ
if (__DEV__ && !isBlock(setupResult)) { if (__DEV__ && !isBlock(setupResult)) {
if (isFunction(component)) { if (isFnComponent) {
warn(`Functional vapor component must return a block directly.`) warn(`Functional vapor component must return a block directly.`)
instance.block = [] instance.block = []
} else if (!component.render) { } else if (!component.render) {