Ответ
В Vue есть несколько способов создания динамических компонентов:
<component :is>- основной способ:
<component :is="currentComponent" />
currentComponent может быть строкой с именем компонента или самим импортированным компонентом.
- Динамический импорт + defineAsyncComponent (для ленивой загрузки):
const AsyncComp = defineAsyncComponent(() => import('./AsyncComp.vue'))
- Рендер-функции (для сложной логики):
render() {
return h(resolveComponent(this.componentName))
}
- Фабричные компоненты - когда компонент создаётся программно:
const component = defineComponent({...})
createApp(component).mount('#app')
Для переключения между компонентами часто используют v-if/v-else или keep-alive для сохранения состояния.