SolidJS Guide
Learn how to use Shimmer From Structure with SolidJS.
Installation
npm install @shimmer-from-structure/solidBasic Usage
Static Content
import { createSignal } from 'solid-js';
import { Shimmer } from '@shimmer-from-structure/solid';
function UserCard() {
const [isLoading, setIsLoading] = createSignal(true);
return (
<Shimmer loading={isLoading()}>
<div class="card">
<img src="avatar.jpg" class="avatar" />
<h2>John Doe</h2>
<p>Software Engineer</p>
</div>
</Shimmer>
);
}Dynamic Content with templateProps
import { createSignal } from 'solid-js';
import { Shimmer } from '@shimmer-from-structure/solid';
import { UserCard } from './UserCard';
function App() {
const [loading, setLoading] = createSignal(true);
const [user, setUser] = createSignal(null);
const userTemplate = {
name: 'Loading...',
role: 'Loading role...',
avatar: 'placeholder.jpg',
};
return (
<Shimmer loading={loading()} templateProps={{ user: userTemplate }}>
<UserCard user={user() || userTemplate} />
</Shimmer>
);
}Global Configuration
Use ShimmerProvider to set global defaults:
import { Shimmer, ShimmerProvider } from '@shimmer-from-structure/solid';
function App() {
return (
<ShimmerProvider
config={{
shimmerColor: 'rgba(56, 189, 248, 0.4)',
backgroundColor: 'rgba(56, 189, 248, 0.1)',
duration: 2.5,
fallbackBorderRadius: 8,
}}
>
<Dashboard />
</ShimmerProvider>
);
}Accessing Config
import { useShimmerConfig } from '@shimmer-from-structure/solid';
function MyComponent() {
const config = useShimmerConfig();
return <div style={{ background: config.backgroundColor }}>...</div>;
}Examples
Dashboard with Multiple Sections
import { createSignal, createEffect } from 'solid-js';
import { Shimmer, ShimmerProvider } from '@shimmer-from-structure/solid';
function Dashboard() {
// Independent signals for loading states
const [loadingUser, setLoadingUser] = createSignal(true);
const [loadingStats, setLoadingStats] = createSignal(true);
const [loadingTransactions, setLoadingTransactions] = createSignal(true);
// Data signals
const [user, setUser] = createSignal(null);
const [stats, setStats] = createSignal(null);
const [transactions, setTransactions] = createSignal(null);
// Simulate data fetching
createEffect(() => {
setTimeout(() => { setUser(realUser); setLoadingUser(false); }, 1000);
setTimeout(() => { setStats(realStats); setLoadingStats(false); }, 2000);
setTimeout(() => { setTransactions(realTransactions); setLoadingTransactions(false); }, 3000);
});
return (
<div class="dashboard">
{/* User Profile */}
<section class="dashboard-section">
<Shimmer loading={loadingUser()} templateProps={{ user: userTemplate }}>
<UserProfile user={user() || userTemplate} />
</Shimmer>
</section>
{/* Stats Grid */}
<section class="dashboard-section">
<Shimmer
loading={loadingStats()}
templateProps={{ stats: statsTemplate }}
shimmerColor="rgba(20, 184, 166, 0.2)"
>
<StatsGrid stats={stats() || statsTemplate} />
</Shimmer>
</section>
{/* Transactions List */}
<section class="dashboard-section">
<Shimmer loading={loadingTransactions()} templateProps={{ transactions: transactionsTemplate }}>
<TransactionsList transactions={transactions() || transactionsTemplate} />
</Shimmer>
</section>
</div>
);
}Next Steps
- API Reference - Explore all available props
- Examples - See more real-world examples
- Best Practices - Learn optimization techniques