From 6c50e20332a9f4807ec41de70694492117f8a965 Mon Sep 17 00:00:00 2001 From: edison Date: Thu, 6 Nov 2025 08:52:53 +0800 Subject: [PATCH] fix(runtime-vapor): pass plain object props to createVNode during vdom interop (#13382) close #14027 --- .../__tests__/vdomInterop.spec.ts | 22 +++++++++++++++++++ packages/runtime-vapor/src/vdomInterop.ts | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/runtime-vapor/__tests__/vdomInterop.spec.ts b/packages/runtime-vapor/__tests__/vdomInterop.spec.ts index a9baea6ab2..546078c8bc 100644 --- a/packages/runtime-vapor/__tests__/vdomInterop.spec.ts +++ b/packages/runtime-vapor/__tests__/vdomInterop.spec.ts @@ -49,6 +49,28 @@ describe('vdomInterop', () => { expect(html()).toBe('foo') }) + + test('should handle class prop when vapor renders vdom component', () => { + const VDomChild = defineComponent({ + setup() { + return () => h('div', { class: 'foo' }) + }, + }) + + const VaporChild = defineVaporComponent({ + setup() { + return createComponent(VDomChild as any, { class: () => 'bar' }) + }, + }) + + const { html } = define({ + setup() { + return () => h(VaporChild as any) + }, + }).render() + + expect(html()).toBe('
') + }) }) describe('v-model', () => { diff --git a/packages/runtime-vapor/src/vdomInterop.ts b/packages/runtime-vapor/src/vdomInterop.ts index c516f64c17..ab232ff8c7 100644 --- a/packages/runtime-vapor/src/vdomInterop.ts +++ b/packages/runtime-vapor/src/vdomInterop.ts @@ -280,7 +280,7 @@ function createVDOMComponent( const frag = new VaporFragment([]) const vnode = (frag.vnode = createVNode( component, - rawProps && new Proxy(rawProps, rawPropsProxyHandlers), + rawProps && extend({}, new Proxy(rawProps, rawPropsProxyHandlers)), )) const wrapper = new VaporComponentInstance( { props: component.props }, -- 2.47.3