Реактивность слотов
Для реактивной работы слотов с v-if или подобным из setup/options api, необходимо вешать v-if на содержимое слота,
всегда отображая сам слот
Проверять наличие слота изнутри самого компонента, необходимо через slotHasContent,
который проверяет содержимое слота, вместо простой проверки !!slots.foo?.()
При этом $slots внутри шаблона реактивен
Проверка наличия слота из render функции так же оставляет реактивность
Реактивно
// Условие в SomeComponent через setup/options
<template>
<SomeComponent>
<template #foo>
<div v-if="bar" />
</template>
</SomeComponent>
</template>
// Условие в SomeComponent через $slots в шаблоне или рендер-функцию
<template>
<SomeComponent>
<template
v-if="bar"
#foo
>
<div />
</template>
</SomeComponent>
</template>
Не реактивно
// Условие в SomeComponent через setup/options
<template>
<SomeComponent>
<template
v-if="bar"
#foo
>
<div />
</template>
</SomeComponent>
</template>
// Условие в SomeComponent через $slots в шаблоне или рендер-функцию
<template>
<SomeComponent>
<template #foo>
<div v-if="bar" />
</template>
</SomeComponent>
</template>