PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Сравни способы создания динамических компонентов на Vue и объясни, когда выбирать каждый вариант.

Компоненты

Во Vue динамические компоненты создают через <component :is>, асинхронную загрузку и render-функции.

<component :is>

<component :is="tabs[current]" v-bind="props" />

Подходит для вкладок, шагов мастера, виджетов на дашборде. В :is можно передать сам компонент или зарегистрированное имя. Чтобы сохранить состояние при переключении, оборачивают в <KeepAlive>.

defineAsyncComponent

const Chart = defineAsyncComponent(() => import('./Chart.vue'));

Компонент загружается отдельным чанком только когда нужен — для тяжёлых редко используемых частей.

Render-функция h

render() {
  return h(this.level === 1 ? 'h1' : 'h2', this.$slots.default());
}

Подходит, когда структура вычисляется из данных и шаблона недостаточно.

Как выбирать

Переключение между известными компонентами — :is; ленивая загрузка — defineAsyncComponent; полностью программная разметка — h.

Коротко для собеседования

<component :is> для переключения, defineAsyncComponent для ленивой загрузки, render-функции для сложной динамики.

Подробнее: Vue — Динамические компоненты

Другие вопросы раздела