Vue从React中借用了
VButton
已经全局注册,可以直接在SFC<template>
中使用,如果不在JSX/TSX中手动导入,如何使用它?
// globally register `VButton`
Vue.createApp({...}).component('VButton', {...})
// 👇 have to import this, is there a way to
// use `VButton` without importing, since it's
// already registered globally.
import VButton from '@/components/VButton.vue'
import { defineComponent } from 'vue'
export default defineComponent({
setup() {
return () => <VButton>Click Me</VButton>
},
})
render
函数和JSX,代码应该以相同的方式编写,即显式导入组件中使用的组件。组件是变量,为了作为VButton
访问,它们需要导入或声明为window
上的全局变量。
注册的全局组件可以在Vue 2:中的全局Vue实例上访问
const VButton = Vue.options.components.VButton;
或者来自Vue 3:中的组件实例
const instance = getCurrentInstance();
const VButton = instance.appContext.components.VButton;
这些方法没有记录在案。
Vue 3中的官方方式是使用resolveComponent
:
const VButton = resolveComponent('VButton');
它们都不会导致TSX的组件类型正确。
好吧,我没想到在全局注册后使用VButton
会直接开箱即用。
import { defineComponent } from 'vue'
export default defineComponent({
setup() {
// 👇 just use it
return () => <VButton>Click Me</VButton>
},
})