Overview
Deferred content rendering composable for performance optimization. Content only renders after first activation unless eager mode is enabled.Features
- Content only renders after first activation (unless eager)
- Optional reset on deactivation for memory savings
- Readonly state refs for template binding
- Manual reset control
- SSR-safe
Function Signature
Parameters
Reactive boolean controlling activation state.
When true, content renders immediately without waiting for activation.
Return Value
Whether the lazy content has been activated at least once.
Whether content should be rendered. True when:
isBooted OR eager OR active.Reset booted state. Call on leave transition if not eager.
Transition callback for after-leave. Resets if not eager.
Examples
Basic usage
With transitions
Eager mode
With reactive eager prop
Manual reset
Dialog with lazy content
Menu with lazy items
Use Cases
- Dialogs: Defer rendering heavy dialog content until opened
- Menus: Load menu items only when menu is opened
- Tooltips: Render tooltip content on first hover
- Tabs: Render tab panels only when activated
- Accordions: Render panel content when expanded
- Drawers: Defer drawer content until opened
Behavior
Without eager mode
-
Component mounts with
active: falseisBooted: falsehasContent: false- Content not rendered
-
activebecomestrueisBooted: truehasContent: true- Content renders
-
activebecomesfalseisBooted: true(stays true)hasContent: true(stays true)- Content stays rendered until transition completes
-
onAfterLeave()calledisBooted: false(reset)hasContent: false- Content removed
With eager mode
hasContentis alwaystrueonAfterLeave()does not reset state- Content never removed once rendered
Notes
- Use
onAfterLeaveas the@after-leavecallback for Vue transitions - Pairs well with Vue’s
<Transition>component - Eager mode is useful for content that should persist after first render
- Manual
reset()allows custom cleanup logic - SSR-safe: works without browser APIs