v-if- умовний рендер: якщо умова хибна, елемента немає в DOM взагалі. При зміні умови елемент (чи компонент) створюється заново або знищується разом зі своїм станом, обробниками й дочірніми компонентами.v-show- елемент рендериться завжди, а умова лише перемикає CSSdisplay: none.
<Modal v-if="isOpen" /> <!-- немає в DOM, поки закрито -->
<div v-show="isExpanded">...</div> <!-- є завжди, лише прихований -->
Як обирати:
v-show- коли елемент перемикають часто (вкладки, розгортання блоків): перемкнути CSS дешевше, ніж щоразу створювати й знищувати.v-if- коли умова змінюється рідко або елемент важкий і часто не потрібен узагалі: не витрачати час на початковий рендер того, що не покажуть.
Наслідки, про які питають:
- З
v-ifстан дочірнього компонента (введений текст, прокрутка) скидається при кожному приховуванні. Зv-show- зберігається. v-ifмаєv-elseіv-else-if,v-show- ні. Іv-showне працює на<template>.- Не ставте
v-ifіv-forна один елемент: у Vue 3v-ifвиконується першим і не бачить змінної циклу. Фільтр - черезcomputedабо<template v-for>зv-ifусередині.