Skip to content

Interop

vue-jsx-vapor provides seamless interoperability between Virtual DOM and Vapor DOM rendering modes. When the interop option is set to true, JSX code within defineVaporComponent compiles to Vapor DOM, while JSX outside of defineVaporComponent compiles to Virtual DOM.

Embedding Vapor Components in Virtual DOM

Playground

ts
import { defineConfig } from 'vite'
import vueJsxVapor from 'vue-jsx-vapor/vite'

export default defineConfig({
  plugins: [
    vueJsxVapor({
      interop: true,
    }),
  ],
})
ts
import { createApp, vaporInteropPlugin } from 'vue'
import App from './App.tsx'
createApp(App).use(vaporInteropPlugin).mount('#app')
tsx
import {
  ,
  ,
  ,
  ,
} from 'vue'
import {  } from 'vue-jsx-vapor'

const  = (({  = 0 }) => {
  ({
    : (() =>  * 2),
  })
   <> x 2 = </>
})

export default (() => {
  const  = (1)
  const  = ()
   () => (
    <>
      < ={.} />
      < ={.} ={}></>
      {.?.}
    </>
  )
})

Embedding Virtual DOM Components in Vapor

Playground

ts
import { defineConfig } from 'vite'
import vueJsxVapor from 'vue-jsx-vapor/vite'

export default defineConfig({
  plugins: [
    vueJsxVapor({
      macros: true,
      interop: true,
    }),
  ],
})
ts
import { createVaporApp, vaporInteropPlugin } from 'vue'
import App from './App.tsx'
createVaporApp(App).use(vaporInteropPlugin).mount('#app')
tsx
import {
  ,
  ,
  ,
  ,
} from 'vue'
import {  } from 'vue-jsx-vapor'

const  = (({  = 0 }) => {
  ({
    : (() =>  * 2),
  })
   <> x 2 = </>
})

export default (() => {
  const  = (1)
  const  = ()
   () => (
    <>
      < ={.}/>
      < ={.} ={}></>
      {.?.}
    </>
  )
})