Suspense و Code Splitting — مقدمة React
Suspense و Code Splitting
Lazy Loading للمكونات
import { lazy, Suspense } from 'react';
// تحميل كسول
const Dashboard = lazy(() => import('./Dashboard'));
const Settings = lazy(() => import('./Settings'));
const Profile = lazy(() => import('./Profile'));
function App() {
return (
<Suspense fallback={<LoadingSpinner />}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/settings" element={<Settings />} />
<Route path="/profile" element={<Profile />} />
</Routes>
</Suspense>
);
}
Loading States
// Skeleton Loading
function LoadingSkeleton() {
return (
<div className="skeleton">
<div className="skeleton-header"></div>
<div className="skeleton-body"></div>
</div>
);
}
// استخدام متعدد Suspense
function App() {
return (
<div>
<Header />
<Suspense fallback={<SidebarSkeleton />}>
<Sidebar />
</Suspense>
<Suspense fallback={<ContentSkeleton />}>
<MainContent />
</Suspense>
</div>
);
}
تحميل مشروط
function ConditionalLoad() {
const [showChart, setShowChart] = useState(false);
// Chart يُحمّل فقط عند الحاجة
const Chart = showChart
? lazy(() => import('./HeavyChart'))
: null;
return (
<div>
<button onClick={() => setShowChart(true)}>
عرض الرسم البياني
</button>
{showChart && (
<Suspense fallback={<p>جارٍ تحميل الرسم...</p>}>
<Chart />
</Suspense>
)}
</div>
);
}
import { lazy, Suspense, useState } from 'react';
// تحميل كسول للمكونات الثقيلة
const HeavyEditor = lazy(() => import('./HeavyEditor'));
const DataVisualization = lazy(() => import('./DataVisualization'));
function App() {
const [activeTab, setActiveTab] = useState('home');
return (
<div>
<nav>
<button onClick={() => setActiveTab('home')}>الرئيسية</button>
<button onClick={() => setActiveTab('editor')}>المحرر</button>
<button onClick={() => setActiveTab('charts')}>الرسوم</button>
</nav>
<main>
{activeTab === 'home' && <Home />}
{activeTab === 'editor' && (
<Suspense fallback={<EditorSkeleton />}>
<HeavyEditor />
</Suspense>
)}
{activeTab === 'charts' && (
<Suspense fallback={<ChartSkeleton />}>
<DataVisualization />
</Suspense>
)}
</main>
</div>
);
}
// Skeleton components
function EditorSkeleton() {
return <div className="skeleton editor-skeleton">جارٍ تحميل المحرر...</div>;
}
function ChartSkeleton() {
return <div className="skeleton chart-skeleton">جارٍ تحميل الرسوم...</div>;
}
اختبر فهمك