# Presence
URL: https://ark-ui.com/docs/utilities/presence
Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/utilities/presence.mdx
Helps control the rendering and unmounting of your content based on a given state.
---
## Examples
By default the child component starts out as hidden and remains hidden after the `present` state is toggled off. This is
useful for situations where the element needs to be hidden initially and continue to stay hidden after its presence is
no longer required.
**Example: basic**
#### React
```tsx
import { Presence } from '@ark-ui/react/presence'
import { useState } from 'react'
export const Basic = () => {
const [present, setPresent] = useState(false)
return (
<>
Hidden and Hidden
>
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
export const Basic = () => {
const [present, setPresent] = createSignal(false)
return (
<>
Hidden and Hidden
>
)
}
```
#### Vue
```vue
Hidden and Hidden
```
#### Svelte
```svelte
Content
```
### Lazy Mount
To delay the mounting of a child component until the `present` prop is set to true, use the `lazyMount` prop:
**Example: lazy-mount**
#### React
```tsx
import { Presence } from '@ark-ui/react/presence'
import { useState } from 'react'
export const LazyMount = () => {
const [present, setPresent] = useState(false)
return (
<>
Unmounted and Hidden
>
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
export const LazyMount = () => {
const [present, setPresent] = createSignal(false)
return (
<>
Unmounted and Hidden
>
)
}
```
#### Vue
```vue
Hidden and Hidden
```
#### Svelte
```svelte
Content
```
### Unmount on Exit
To remove the child component from the DOM when it's not present, use the `unmountOnExit` prop:
**Example: unmount-on-exit**
#### React
```tsx
import { Presence } from '@ark-ui/react/presence'
import { useState } from 'react'
export const UnmountOnExit = () => {
const [present, setPresent] = useState(false)
return (
<>
Hidden and Unmounted on Exit
>
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
export const UnmountOnExit = () => {
const [present, setPresent] = createSignal(false)
return (
<>
Hidden and Unmounted on Exit
>
)
}
```
#### Vue
```vue
Hidden and Unmounted on Exit
```
#### Svelte
```svelte
Content
```
### Combining Lazy Mount and Unmount on Exit
Both `lazyMount` and `unmountOnExit` can be combined for a component to be mounted only when it's present and to be
unmounted when it's no longer present:
**Example: lazy-mount-and-unmount-on-exit**
#### React
```tsx
import { Presence } from '@ark-ui/react/presence'
import { useState } from 'react'
export const LazyMountAndUnmountOnExit = () => {
const [present, setPresent] = useState(false)
return (
<>
Lazy Mount and Unmounted on Exit
>
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
export const LazyMountAndUnmountOnExit = () => {
const [present, setPresent] = createSignal(false)
return (
<>
Lazy Mount and Unmounted on Exit
>
)
}
```
#### Vue
```vue
Lazy Mount and Unmounted on Exit
```
#### Svelte
```svelte
Content
```
## API Reference
**Component API Reference**
#### React
**Presence Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `immediate` | `boolean` | No | Whether to synchronize the present change immediately or defer it to the next frame |
| `onExitComplete` | `VoidFunction` | No | Function called when the animation ends in the closed state |
| `present` | `boolean` | No | Whether the node is present (controlled by the user) |
#### Solid
**Presence Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `immediate` | `boolean` | No | Whether to synchronize the present change immediately or defer it to the next frame |
| `lazyMount` | `boolean` | No | Whether to enable lazy mounting |
| `onExitComplete` | `VoidFunction` | No | Function called when the animation ends in the closed state |
| `present` | `boolean` | No | Whether the node is present (controlled by the user) |
| `skipAnimationOnMount` | `boolean` | No | Whether to allow the initial presence animation. |
| `unmountOnExit` | `boolean` | No | Whether to unmount on exit. |
#### Vue
**Presence Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `immediate` | `boolean` | No | Whether to synchronize the present change immediately or defer it to the next frame |
| `onExitComplete` | `VoidFunction` | No | Function called when the animation ends in the closed state |
| `present` | `boolean` | No | Whether the node is present (controlled by the user) |
#### Svelte
**Presence Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `immediate` | `boolean` | No | Whether to synchronize the present change immediately or defer it to the next frame |
| `lazyMount` | `boolean` | No | Whether to enable lazy mounting |
| `onExitComplete` | `VoidFunction` | No | Function called when the animation ends in the closed state |
| `present` | `boolean` | No | Whether the node is present (controlled by the user) |
| `ref` | `Element` | No | |
| `skipAnimationOnMount` | `boolean` | No | Whether to allow the initial presence animation. |
| `unmountOnExit` | `boolean` | No | Whether to unmount on exit. |