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
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
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}
</>
)
})