فهرست منبع

fix(runtime-vapor): pass plain object props to createVNode during vdom interop (#13382)

close #14027
edison 5 ماه پیش
والد
کامیت
6c50e20332
2فایلهای تغییر یافته به همراه23 افزوده شده و 1 حذف شده
  1. 22 0
      packages/runtime-vapor/__tests__/vdomInterop.spec.ts
  2. 1 1
      packages/runtime-vapor/src/vdomInterop.ts

+ 22 - 0
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('<div class="foo bar"></div>')
+    })
   })
 
   describe('v-model', () => {

+ 1 - 1
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 },