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

+1 164новые вакансии за сутки·93 595вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 121
  • Облачные технологии14 079
  • QA вакансии3 451
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 260

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 659
  • Java6 537
  • Node.js2 020
  • .NET1 721
  • Kotlin1 614
  • Rust1 455
  • C#710
  • PHP681
  • C++571

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

  • Kubernetes7 772
  • DevOps вакансии6 050
  • Linux-инфраструктура5 488
  • Terraform / IaC4 272
  • CI/CD3 239
  • Мониторинг и Observability1 789
  • SRE567
  • Кибербезопасность452

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

  • Data Scientist1 140
  • Бизнес-аналитик923
  • Аналитик данных855
  • Системный аналитик152

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

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

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 627
  • Middle вакансии20 864
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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