# 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'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const Basic = () => {
const [present, setPresent] = useState(false)
return (
Content
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const Basic = () => {
const [present, setPresent] = createSignal(false)
return (
Content
)
}
```
#### Vue
```vue
Content
```
#### 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'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const LazyMount = () => {
const [present, setPresent] = useState(false)
return (
Lazy Mounted
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const LazyMount = () => {
const [present, setPresent] = createSignal(false)
return (
Lazy Mounted
)
}
```
#### Vue
```vue
Lazy Mounted
```
#### Svelte
```svelte
Lazy Mounted
```
### 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'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const UnmountOnExit = () => {
const [present, setPresent] = useState(false)
return (
Unmount on Exit
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const UnmountOnExit = () => {
const [present, setPresent] = createSignal(false)
return (
Unmount on Exit
)
}
```
#### Vue
```vue
Unmount on Exit
```
#### Svelte
```svelte
Unmount on Exit
```
### 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'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const LazyMountAndUnmountOnExit = () => {
const [present, setPresent] = useState(false)
return (
Lazy + Unmount
)
}
```
#### Solid
```tsx
import { Presence } from '@ark-ui/solid/presence'
import { createSignal } from 'solid-js'
import button from 'styles/button.module.css'
import styles from 'styles/presence.module.css'
export const LazyMountAndUnmountOnExit = () => {
const [present, setPresent] = createSignal(false)
return (
Lazy + Unmount
)
}
```
#### Vue
```vue
Lazy + Unmount
```
#### Svelte
```svelte
Lazy + Unmount
```
## API Reference
**Component API Reference**
#### React
**Presence Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | 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. |
#### 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 |
|------|------|----------|-------------|
| `asChild` | `boolean` | 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 |
| `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. |
#### 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. |