Гид по технологиям

Условный рендеринг во Vue.js: v-if и v-show

6 min read Frontend Обновлено 09 Jan 2026
v-if vs v-show — Условный рендеринг во Vue.js
v-if vs v-show — Условный рендеринг во Vue.js

Узнайте, как управлять показом элементов во Vue.js с помощью директив v-if и v-show. v-if добавляет/удаляет элемент из DOM, хорошо подходит для редких изменений; v-show переключает CSS display, подходит для частых изменений. В статье — примеры, нюансы производительности, чеклист и рекомендации по выбору.

Крупный план руки, держащей наклейку Vue.js

Vue.js — популярный JavaScript-фреймворк для создания динамичных веб-приложений. Он рендерит HTML на основе данных и событий, что упрощает создание интерактивных интерфейсов. Одним из ключевых механизмов управления отображением в шаблонах Vue являются директивы.

В этой статье мы рассмотрим, что такое директивы Vue, подробно разберём условный рендеринг с помощью v-if и v-show, покажем примеры, разберём типичные ошибки и предложим пошаговую методологию выбора между ними.

Что такое директивы Vue

Директивы Vue — это специальные атрибуты в шаблонах, которые расширяют поведение HTML-элементов. Они начинаются с префикса v- (например, v-if, v-show, v-for, v-bind, v-on). Директивы позволяют управлять DOM, связывать данные и реагировать на события.

Кратко:

  • Директива — атрибут для управления DOM в шаблонах.
  • Реактивность — механизм Vue, который отслеживает изменения данных и повторно рендерит части шаблона.

Что такое условный рендеринг

Условный рендеринг позволяет показывать или скрывать элементы в зависимости от условий. Это удобно, например, чтобы отображать сообщение об ошибке только при некорректном вводе или показывать список пользователей после загрузки данных.

Во Vue для этого чаще всего используют директивы v-if и v-show. Они похожи внешне, но работают по-разному и имеют разные сценарии применения.

v-if: как это работает

Директива v-if управляет наличием элемента в DOM. Если выражение ложно, Vue полностью не рендерит элемент — он не появляется в DOM вообще. При повторном возвращении истинного значения элемент создаётся заново.

Это похоже на условный оператор if в JavaScript: элемент либо есть в DOM, либо его нет.

Пример (оригинальный код сохранён):

  
  
  
    Document  
      
  
  
      
        {{ message1 }}  
        {{ message2 }}  
    
    

Пояснения:

  • Элемент с v-if не присутствует в DOM, пока выражение ложно.
  • При повторном монтировании компонент создаётся заново, поэтому состояние внутри элемента (например, значения в полях форм) будет сбрасываться при удалении и восстановлении.

Когда использовать v-if:

  • Элемент рендерится редко (например, модальное окно, показываемое нечасто).
  • Вы хотите экономить память и не держать в DOM тяжёлые элементы, пока они не нужны.

Ограничения и подводные камни v-if:

  • Повторный монтинг может быть дорогим, если внутри компонента много логики и инициализаций.
  • При использовании с v-for нужно быть аккуратным: сочетание может привести к сложным условиям рендеринга.

Пример с динамическим отображением списка (оригинал)

  
  
  
    Vue app  
      
  
  
      
          
            
                    
  • User1
  •                 
  • User2
  •             
        
                     Toggle Users                  

{{ message }}

    
    

Этот пример демонстрирует простое условное отображение списка пользователей. Каждый раз при переключении showUsers контейнер с

будет удаляться или создаваться в DOM.

v-show: как это работает

Директива v-show управляет видимостью элемента через CSS. При false элемент остаётся в DOM, но получает стиль display: none; при true — стиль удаляется и элемент снова виден.

Ключевое различие: v-show не монтирует и не размонтирует элемент, он всегда присутствует в DOM.

Оригинальный пример с v-show:

  
      
          
            
                    
  • User1
  •                 
  • User2
  •             
        
                     Toggle Users                  {{ message }}     
    

Когда использовать v-show:

Ограничения v-show:

Сравнение v-if и v-show

Критерийv-ifv-show
Удаление из DOMДа (монтируется/размонтируется)Нет (только CSS: display)
Подходит для редких измененийДаНет
Подходит для частых переключенийНетДа
Сохранение состояния внутри элементаНет (сброс при размонтировании)Да
Влияние на начальную загрузку страницыМожет ускорять (меньше DOM)Может замедлять при множестве скрытых элементов

Важно: выбор зависит от сценария использования и объёма содержимого.

Частые ошибки и когда эти подходы не подходят

Мини-методология: как выбрать (шаги)

  1. Оцените частоту переключений
    • Редко: предпочитайте v-if.
    • Часто: предпочитайте v-show.
  2. Нужна ли сохранность состояния компонента между показами?
    • Да: v-show (или хранить состояние в родителе/хранилище).
    • Нет: v-if.
  3. Насколько «тяжёлый» компонент с точки зрения рендеринга?
    • Очень тяжёлый: v-if, чтобы не держать в DOM.
  4. Требуется ли, чтобы элемент присутствовал в начальном HTML (для SEO/SSR)?
    • Если да: учтите, что v-show присутствует в HTML, v-if — может отсутствовать.

Чеклист приёмки (перед деплоем)

Дополнительные приёмы и альтернативы

Пример использования keep-alive (новый пример):



Этот шаблон сохраняет состояние HeavyComponent между показами при помощи keep-alive, но при этом сам компонент монтируется только когда showView истинно.

Совместимость и нюансы (SSR, transitions, accessibility)

Краткая схема принятия решения (Mermaid)

flowchart TD
  A[Начало] --> B{Часто ли будет меняться условие?}
  B -- Да --> C[v-show]
  B -- Нет --> D{Нужны ли ресурсы до показа?}
  D -- Да --> C
  D -- Нет --> E[v-if]
  C --> F[Конец]
  E --> F

Небольшой глоссарий — 1 строка каждое

Примеры тест-кейсов (приёмка)

Резюме

v-if и v-show решают одну задачу — условный рендеринг — но делают это по-разному. v-if удаляет элемент из DOM и подходит для редких изменений; v-show прячет элемент через display и лучше для частых переключений. Выбор зависит от частоты изменений, требований к сохранению состояния и производительности.

Важно: тестируйте конкретные сценарии вашего приложения (SSR, переходы, формы) и применяйте дополнительные приёмы — keep-alive, динамическую загрузку, ключи (key) — чтобы достичь ожидаемой UX и производительности.

Ключевые рекомендации:

Критерии приёмки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство