]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-vapor): pass plain object props to createVNode during vdom interop (...
authoredison <daiwei521@126.com>
Thu, 6 Nov 2025 00:52:53 +0000 (08:52 +0800)
committerGitHub <noreply@github.com>
Thu, 6 Nov 2025 00:52:53 +0000 (08:52 +0800)
close #14027

packages/runtime-vapor/__tests__/vdomInterop.spec.ts
packages/runtime-vapor/src/vdomInterop.ts

index a9baea6ab2d986de7757638a7d89e2aeb94b8750..546078c8bcbd91a1170c52ca48bc2accf8acad27 100644 (file)
@@ -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('<div class="foo bar"></div>')
+    })
   })
 
   describe('v-model', () => {
index c516f64c17aed095002974c96b582e37da40f99d..ab232ff8c7878147be37ce2ee8126755e04be2de 100644 (file)
@@ -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 },