Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+687новых вакансий за сутки·55 254вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 791
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python7 042
  • Облачные технологии5 085
  • QA вакансии1 814
  • Android1 199
  • Инженер данных831
  • Продакт-менеджер339

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++223
  • C#199

DevOps и инфраструктура

  • Kubernetes2 931
  • Linux-инфраструктура2 312
  • DevOps вакансии2 110
  • Terraform / IaC1 714
  • CI/CD872
  • Мониторинг и Observability825
  • SRE253
  • Кибербезопасность50

Аналитика и данные

  • Аналитик данных497
  • Data Scientist463
  • Бизнес-аналитик374
  • Системный аналитик54

Другие направления

  • Проджект-менеджер119
  • UI/UX дизайн72
  • Ручное тестирование14

По регионам

  • Вакансии в США25 531
  • Вакансии в Европе9 792
  • Работа в России3 193
  • Вакансии в Канаде2 236

По формату

  • Удалённые вакансии43 578
  • Релокация в США25 531
  • Гибридная работа4 289
  • Офисная работа3 340

По уровню

  • Senior вакансии21 650
  • Middle вакансии12 211
  • Junior вакансии3 886

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Vue.jsВсе вопросы
Vue.jsMiddleТеория

Что такое динамические компоненты и паттерн <component :is="">?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

<component :is="X"> рендерит компонент или HTML-тег, переданный как объект или строка. Используется для вкладок, визардов, полиморфных блоков. Для сохранения состояния оборачивается в KeepAlive; объект компонента храните в shallowRef.

Базовый пример с вкладками

// TabView.vue
<script setup lang="ts">
import { shallowRef } from 'vue'
import TabHome from './TabHome.vue'
import TabProfile from './TabProfile.vue'
import TabSettings from './TabSettings.vue'

const tabs = {
  home: TabHome,
  profile: TabProfile,
  settings: TabSettings,
} as const

type TabKey = keyof typeof tabs
const current = shallowRef<TabKey>('home')
</script>

<template>
  <nav>
    <button
      v-for="key in (Object.keys(tabs) as TabKey[])"
      :key="key"
      :class="{ active: current === key }"
      @click="current = key"
    >
      {{ key }}
    </button>
  </nav>

  <KeepAlive :include="['TabHome', 'TabProfile']">
    <component :is="tabs[current]" />
  </KeepAlive>
</template>

Почему shallowRef, а не ref? Объект компонента (TabHome) при хранении в обычном ref стал бы глубоко реактивным — Vue обошёл бы все его свойства прокси-оборачиванием. Это бесполезно и замедляет инициализацию. shallowRef хранит ссылку без проксирования вложенных полей. Альтернатива — markRaw(TabHome).

Что такое динамические компоненты

Динамический компонент — механизм Vue, позволяющий рендерить разные компоненты в одной точке шаблона на основании реактивного значения. Специальный элемент <component :is="..."> принимает строку с именем зарегистрированного компонента, объект компонента или результат defineAsyncComponent. При смене значения is Vue размонтирует предыдущий компонент и монтирует новый.

Типичные применения: вкладки, шаги визарда, рендер блоков статьи по типу (текст / изображение / видео / цитата), переключение форм входа/регистрации.

Динамический тег HTML

<script setup lang="ts">
const props = defineProps<{ level: 1 | 2 | 3 | 4 }>()
</script>

<template>
  <component :is="`h${level}`">
    <slot />
  </component>
</template>

Передача строки вместо объекта компонента заставляет Vue рендерить нативный HTML-тег. Удобно для семантически корректных заголовков или полиморфных обёрток (div / section / article).

Асинхронные компоненты и Suspense

<script setup lang="ts">
import { defineAsyncComponent, shallowRef } from 'vue'

const AsyncChart = defineAsyncComponent({
  loader: () => import('./HeavyChart.vue'),
  loadingComponent: () => import('./Spinner.vue'),
  errorComponent: () => import('./ErrorBanner.vue'),
  delay: 200,
  timeout: 5000,
})

const current = shallowRef(AsyncChart)
</script>

<template>
  <Suspense>
    <component :is="current" />
    <template #fallback>Загрузка...</template>
  </Suspense>
</template>

KeepAlive: сохранение состояния

Без <KeepAlive> каждый переход уничтожает и пересоздаёт состояние компонента. KeepAlive кеширует экземпляры; компонент получает хуки onActivated / onDeactivated вместо onMounted / onUnmounted. Атрибут :include принимает массив имён, :max ограничивает размер LRU-кеша.

Подводные камни

  • Объект компонента в обычном ref — глубокая реактивность без пользы; всегда используйте shallowRef или markRaw.
  • При передаче строки (имени компонента) Vue ищет его в локальных импортах и глобальных регистрациях; в DEV-режиме выведет предупреждение если не найдёт.
  • При SSR (Nuxt) убедитесь, что значение current одинаково на сервере и клиенте при гидрации, иначе получите hydration mismatch.
  • Асинхронные компоненты без Suspense или loadingComponent покажут пустоту во время загрузки — всегда обрабатывайте состояние загрузки.
  • KeepAlive удерживает экземпляры компонентов в памяти — не кешируйте тяжёлые компоненты без ограничения :max.
  • Props и события пробрасываются на текущий компонент автоматически, но TypeScript не знает тип текущего компонента — типизируйте явно при необходимости.
  • При динамическом теге (:is="tag") Vue не проверяет, что строка является валидным HTML-тегом — некорректные значения создадут кастомный элемент без ошибки в рантайме.
  • Не путайте <component :is> с v-if/v-else-if: для двух-трёх фиксированных вариантов условный рендеринг нагляднее; динамический компонент выигрывает при расширяемом наборе вариантов.

Частые вопросы на собеседовании

  • Как работает система реактивности Vue? Что изменилось между Vue 2 и Vue 3 (Proxy вместо Object.defineProperty)?
  • Что такое Pinia? Чем она отличается от Vuex и почему является рекомендованным менеджером состояния для Vue 3?
  • Что такое ref() и reactive() в Composition API? Когда использовать каждый?
  • В каких типах frontend-проектов Vue.js даёт реальный выигрыш, а где будет избыточен или неудачен?

Типичные ошибки

  • Хранить компонент-объект в ref и удивляться, что Vue его проксирует.
  • Забывать <KeepAlive> и каждый раз терять состояние вкладки.
  • Передавать в is строку с именем, не зарегистрировав компонент глобально/локально.
  • Сочетать :is с v-if, когда достаточно одного из них.

Что проверяет интервьюер

  • Знает синтаксис <component :is> и оба варианта значения (строка или объект).
  • Понимает связь с <KeepAlive>.
  • Знает про shallowRef/markRaw для хранения компонентов.
  • Видит сценарии: вкладки, динамические форм-контролы, мастер-визарды.

Как вы знаете этот вопрос?

Проверить себя по теме Vue.js →

Источники

  • https://vuejs.org/guide/essentials/component-basics.html#dynamic-components
  • https://vuejs.org/api/built-in-special-elements.html#component

Связанные темы

Vue.jscomponent-compositionrendering-modelvue-fundamentals