\n```\n\n### Ключевые особенности Teleport\n\n* **Целевой элемент указывается через свойство `to`**:\n ```vue\n \n \n \n ```\n Цель может быть CSS-селектором или прямым ссылкой на DOM-элемент.\n\n* **Сохраняется контекст Vue**:\n Компоненты внутри `` продолжают иметь доступ к данным, методам и слотам родительского компонента, поскольку Teleport не затрагивает логическую иерархию компонентов, а только влияет на физическое расположение DOM.\n\n* **Условный рендеринг**:\n Teleport можно использовать с `v-if`, `v-show` или другими условными директивами.\n\n* **Несколько Teleport в одну цель**:\n Vue автоматически обрабатывает порядок добавления элементов, когда несколько Teleport рендерятся в один целевой узел:\n ```vue\n \n \n
Первый
\n
\n \n \n
Второй
\n
\n ```\n\n### Практические примеры использования\n\n* **Модальные окна и диалоги**:\n Рендеринг непосредственно в `` для правильного позиционирования поверх всех элементов.\n\n* **Уведомления и тосты**:\n Создание системы уведомлений, которая рендерится в специальном контейнере вне основного контента.\n\n* **Всплывающие подсказки и тултипы**:\n Когда нужно обойти ограничения `overflow: hidden` в родительских контейнерах.\n\n* **Сайдбары и боковые панели**:\n Для полностраничных навигационных панелей, которые должны перекрывать основной контент.\n\n### Отличие от порталов в React\n\nХотя концепция похожа на `ReactDOM.createPortal()` в React, Vue Teleport:\n1. Реализован как встроенный компонент с декларативным синтаксисом\n2. Полностью интегрирован с системой реактивности и жизненным циклом Vue\n3. Не требует импорта дополнительных утилит\n\n### Особенности использования\n\n* **Безопасность**:\n Teleport не рендерится, если целевой элемент не существует в DOM, что предотвращает ошибки.\n\n* **Отключение Teleport**:\n Можно временно отключить функциональность через свойство `disabled`:\n ```vue\n \n ```\n\n* **Совместимость с Composition API и Options API**:\n Teleport одинаково работает с обеими синтаксическими подходами Vue.\n\n**Teleport** стал важным инструментом в арсенале Vue-разработчика, устраняя давнюю проблему управления слоями интерфейса без нарушения архитектурных принципов компонентного подхода. Его декларативный синтаксис и полная интеграция с экосистемой Vue делают работу с \"порталами\" интуитивно понятной и эффективной.","dateCreated":"2026-04-06T23:29:55.897624","upvoteCount":0,"author":{"@type":"Person","name":"deepseek-v3.2"}}}}
← Назад к вопросам

Что такое teleport?

2.0 Middle🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Teleport во Vue.js?

Teleport — это встроенный компонент во Vue.js 3, который позволяет рендерить часть шаблона компонента в DOM-узел вне иерархии этого компонента, сохраняя при этом логическую принадлежность к исходному компоненту в области видимости Vue.

Основная проблема, которую решает Teleport

В традиционной DOM-иерархии Vue компоненты рендерятся как вложенные элементы. Однако для некоторых UI-элементов, таких как модальные окна, всплывающие подсказки, уведомления или диалоговые окна, часто требуется визуальное отображение на верхнем уровне DOM (например, непосредственно в <body>), чтобы избежать проблем с z-index, overflow: hidden или другими CSS-ограничениями родительских контейнеров.

Без Teleport разработчикам приходилось использовать глобальные компоненты или сложные методы рендеринга, что нарушало инкапсуляцию компонентов.

Синтаксис и использование

<template>
  <div class="container">
    <button @click="showModal = true">Открыть модальное окно</button>
    
    <Teleport to="body">
      <div v-if="showModal" class="modal">
        <h2>Заголовок модального окна</h2>
        <p>Содержимое, которое рендерится в body</p>
        <button @click="showModal = false">Закрыть</button>
      </div>
    </Teleport>
  </div>
</template>

<script setup>
import { ref } from 'vue';

const showModal = ref(false);
</script>

Ключевые особенности Teleport

  • Целевой элемент указывается через свойство to:

    <Teleport to="#modal-container">
    <Teleport to=".sidebar">
    <Teleport to="body">
    

    Цель может быть CSS-селектором или прямым ссылкой на DOM-элемент.

  • Сохраняется контекст Vue: Компоненты внутри <Teleport> продолжают иметь доступ к данным, методам и слотам родительского компонента, поскольку Teleport не затрагивает логическую иерархию компонентов, а только влияет на физическое расположение DOM.

  • Условный рендеринг: Teleport можно использовать с v-if, v-show или другими условными директивами.

  • Несколько Teleport в одну цель: Vue автоматически обрабатывает порядок добавления элементов, когда несколько Teleport рендерятся в один целевой узел:

    <!-- Оба появятся в #target в порядке их объявления -->
    <Teleport to="#target">
      <div>Первый</div>
    </Teleport>
    
    <Teleport to="#target">
      <div>Второй</div>
    </Teleport>
    

Практические примеры использования

  • Модальные окна и диалоги: Рендеринг непосредственно в <body> для правильного позиционирования поверх всех элементов.

  • Уведомления и тосты: Создание системы уведомлений, которая рендерится в специальном контейнере вне основного контента.

  • Всплывающие подсказки и тултипы: Когда нужно обойти ограничения overflow: hidden в родительских контейнерах.

  • Сайдбары и боковые панели: Для полностраничных навигационных панелей, которые должны перекрывать основной контент.

Отличие от порталов в React

Хотя концепция похожа на ReactDOM.createPortal() в React, Vue Teleport:

  1. Реализован как встроенный компонент с декларативным синтаксисом
  2. Полностью интегрирован с системой реактивности и жизненным циклом Vue
  3. Не требует импорта дополнительных утилит

Особенности использования

  • Безопасность: Teleport не рендерится, если целевой элемент не существует в DOM, что предотвращает ошибки.

  • Отключение Teleport: Можно временно отключить функциональность через свойство disabled:

    <Teleport :disabled="isMobile" to="body">
    
  • Совместимость с Composition API и Options API: Teleport одинаково работает с обеими синтаксическими подходами Vue.

Teleport стал важным инструментом в арсенале Vue-разработчика, устраняя давнюю проблему управления слоями интерфейса без нарушения архитектурных принципов компонентного подхода. Его декларативный синтаксис и полная интеграция с экосистемой Vue делают работу с "порталами" интуитивно понятной и эффективной.

Что такое teleport? | PrepBro