Оба условно отображают элемент, но делают это по-разному — v-if добавляет/удаляет элемент из DOM; v-show оставляет его в DOM и переключает CSS display.
vue
<template>
<p v-if="isVisible">Rendered only when true (removed from DOM when false)</p>
<p v-show="isVisible">Always in the DOM; just display:none when false</p>
</template>
