Presence

Manages mounting and unmounting of element with transition support.
QuestionHow is this component different from Vue Transition?A: The biggest difference is it accepts css animation, and control the visibility of element.

Presence component provides enhanced control over element mounting/unmounting. It ensures animations and transitions complete before removing elements from the DOM, making it perfect for animated UI components.

API Reference

PropDefaultTypeDescription
present*booleanConditional to mount or unmount the child element. Similar to v-if
forceMountfalsebooleanForce the element to render all the time. Useful for programmatically render grandchild component with the exposed present
EventTypeDescription
enterCustomEventEvent handler called when the enter animation has started
after-enterCustomEventEvent handler called when the enter animation has finished
leaveCustomEventEvent handler called when the leave animation has started
after-leaveCustomEventEvent handler called when the leave animation has finished
Read our Animation Guide to learn more about implementing animations with Presence component.

Example

<template>
  <Presence :present="isVisible">
    <div
      :data-state="isVisible ? 'open' : 'closed'"
      class="data-[state=open]:animate-fadeIn data-[state=closed]:animate-fadeOut"
    >
      <slot />
    </div>
  </Presence>
</template>

Force Mount

When you need to ensure content is always rendered regardless of the present state:

<template>
  <Presence
    v-slot="{ present }"
    :present="isVisible"
    :force-mount="true"
  >
    <div>
      This content will always be rendered

      <div v-if="present">
        This content is hidden
      </div>
    </div>
  </Presence>
</template>