mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-02-13 15:15:45 +01:00
- Fix syntax errors in skills markdown files (.github/skills, .opencode/skills) - Change typescript to tsx for code blocks with JSX - Replace ellipsis (...) in array examples with valid syntax - Separate CSS from TypeScript into distinct code blocks - Convert JavaScript object examples to valid JSON in docs - Fix enum definitions with proper comma separation
38 lines
966 B
Markdown
38 lines
966 B
Markdown
---
|
|
title: Conditional Module Loading
|
|
impact: HIGH
|
|
impactDescription: loads large data only when needed
|
|
tags: bundle, conditional-loading, lazy-loading
|
|
---
|
|
|
|
## Conditional Module Loading
|
|
|
|
Load large data or modules only when a feature is activated.
|
|
|
|
**Example (lazy-load animation frames):**
|
|
|
|
```tsx
|
|
function AnimationPlayer({
|
|
enabled,
|
|
setEnabled,
|
|
}: {
|
|
enabled: boolean;
|
|
setEnabled: React.Dispatch<React.SetStateAction<boolean>>;
|
|
}) {
|
|
const [frames, setFrames] = useState<Frame[] | null>(null);
|
|
|
|
useEffect(() => {
|
|
if (enabled && !frames && typeof window !== "undefined") {
|
|
import("./animation-frames.js")
|
|
.then((mod) => setFrames(mod.frames))
|
|
.catch(() => setEnabled(false));
|
|
}
|
|
}, [enabled, frames, setEnabled]);
|
|
|
|
if (!frames) return <Skeleton />;
|
|
return <Canvas frames={frames} />;
|
|
}
|
|
```
|
|
|
|
The `typeof window !== 'undefined'` check prevents bundling this module for SSR, optimizing server bundle size and build speed.
|