fix(runtime-vapor): handle vapor attrs fallthrough to vdom component (#13551)

This commit is contained in:
edison 2025-09-02 14:05:16 +08:00 committed by GitHub
parent 96ca3b0243
commit 5ce227bd22
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 13 deletions

View File

@ -214,6 +214,32 @@ describe('vdomInterop', () => {
describe.todo('dynamic component', () => {})
describe('attribute fallthrough', () => {
it('should fallthrough attrs to vdom child', () => {
const VDomChild = defineComponent({
setup() {
return () => h('div')
},
})
const VaporChild = defineVaporComponent({
setup() {
return createComponent(
VDomChild as any,
{ foo: () => 'vapor foo' },
null,
true,
)
},
})
const { html } = define({
setup() {
return () => h(VaporChild as any, { foo: 'foo', bar: 'bar' })
},
}).render()
expect(html()).toBe('<div foo="foo" bar="bar"></div>')
})
it('should not fallthrough emit handlers to vdom child', () => {
const VDomChild = defineComponent({
emits: ['click'],

View File

@ -149,19 +149,6 @@ export function createComponent(
resetInsertionState()
}
// vdom interop enabled and component is not an explicit vapor component
if (appContext.vapor && !component.__vapor) {
const frag = appContext.vapor.vdomMount(
component as any,
rawProps,
rawSlots,
)
if (!isHydrating && _insertionParent) {
insert(frag, _insertionParent, _insertionAnchor)
}
return frag
}
if (
isSingleRoot &&
component.inheritAttrs !== false &&
@ -180,6 +167,19 @@ export function createComponent(
}
}
// vdom interop enabled and component is not an explicit vapor component
if (appContext.vapor && !component.__vapor) {
const frag = appContext.vapor.vdomMount(
component as any,
rawProps,
rawSlots,
)
if (!isHydrating && _insertionParent) {
insert(frag, _insertionParent, _insertionAnchor)
}
return frag
}
const instance = new VaporComponentInstance(
component,
rawProps as RawProps,