Skip to content

Interop

vue-jsx-vapor support virtual-dom and vapor-dom co-usage. After set interop to true, vue-jsx-vapor will be only convert in defineVaporComponent's JSX.

Vapor in Virtual DOM

REPL

ts
import vueJsx from '@vitejs/plugin-vue-jsx'
import { defineConfig } from 'vite'
import vueJsxVapor from 'vue-jsx-vapor/vite'

export default defineConfig({
  plugins: [
    vueJsxVapor({
      macros: true,
      interop: true,
    }),
    vueJsx(),
  ],
})
ts
import { createApp, vaporInteropPlugin } from 'vue'
import App from './App.tsx'
createApp(App).use(vaporInteropPlugin).mount('#app')
tsx
import {
  
computed
,
defineComponent
,
defineVaporComponent
,
ref
,
} from 'vue' import {
useRef
} from 'vue-jsx-vapor'
const
Comp
=
defineVaporComponent
(({
count
= 0 }) => {
defineExpose
({
double
:
computed
(() =>
count
* 2),
}) return <
span
> x 2 = </
span
>
}) export default
defineComponent
(() => {
const
count
=
ref
(1)
const
compRef
=
useRef
()
return () => ( <> <
input
v-model
={
count
.
value
} />
<
Comp
count
={
count
.
value
}
ref
={
compRef
}></
Comp
>
{
compRef
.
value
?.
double
}
</> ) })

Virtual DOM in Vapor

REPL

ts
import vueJsx from '@vitejs/plugin-vue-jsx'
import { defineConfig } from 'vite'
import vueJsxVapor from 'vue-jsx-vapor/vite'

export default defineConfig({
  plugins: [
    vueJsxVapor({
      macros: true,
      interop: true,
    }),
    vueJsx(),
  ],
})
ts
import { createVaporApp, vaporInteropPlugin } from 'vue'
import App from './App.tsx'
createVaporApp(App).use(vaporInteropPlugin).mount('#app')
tsx
import {
  
computed
,
defineComponent
,
defineVaporComponent
,
ref
,
} from 'vue' import {
useRef
} from 'vue-jsx-vapor'
const
Comp
=
defineVaporComponent
(({
count
= 0 }) => {
defineExpose
({
double
:
computed
(() =>
count
* 2),
}) return <
span
> x 2 = </
span
>
}) export default
defineComponent
(() => {
const
count
=
ref
(1)
const
compRef
=
useRef
()
return () => ( <> <
input
v-model
={
count
.
value
}/>
<
Comp
count
={
count
.
value
}
ref
={
compRef
}></
Comp
>
{
compRef
.
value
?.
double
}
</> ) })