Skip to main content

CustomSkeleton Komponens (Skeleton betöltő)

A CustomSkeleton komponens egy testreszabható, animált "váz" betöltőket generál, amelyek a tartalom betöltése közben vizuális visszajelzést nyújtanak a felhasználóknak. A @mui/material Skeleton komponensét használja, és a random segédfüggvénnyel változatos méreteket állít elő.

Működés

  • Formátum alapú generálás: A format propban megadott "title" vagy "description" típusok alapján generál SizeSkeleton elemeket.
    • "title" esetén egy szélesebb, de alacsonyabb, címre emlékeztető vázat hoz létre.
    • "description" esetén egy keskenyebb, de hosszabb, szövegblokkra emlékeztető vázat hoz létre.
  • Véletlenszerű méretezés: A SizeSkeleton alkomponens a random segédfüggvénnyel generál véletlenszerű szélességet és magasságot a megadott tartományon belül (min, max), így a vázak természetesebbnek és kevésbé monotonnak tűnnek.
  • Animáció: A @mui/material Skeleton komponens animációját használja a vizuális betöltési effektushoz.

Propok

NévTípusKötelezőLeírás
formatArray<"title" | "description">IgenStringek tömbje, amely meghatározza, hogy milyen típusú (cím vagy leírás) váz elemeket generáljon a komponens.

SizeSkeleton alkomponens

Ez egy belsőleg használt komponens, amely egyedi Skeleton elemeket hoz létre.

NévTípusKötelezőLeírás
widthtypeOfSizeIgenObjektum ({min: number, max: number}), amely a szélesség minimális és maximális értékét adja meg.
heighttypeOfSizeIgenObjektum ({min: number, max: number}), amely a magasság minimális és maximális értékét adja meg.
keystringIgenA React lista rendereléséhez szükséges egyedi kulcs.

typeOfSize interface

KulcsTípusLeírás
minnumberMinimális érték.
maxnumberMaximális érték.

Használati példa

Az alábbi példa egy profil oldal felhasználói adatainak betöltését szimulálja, és addig a CustomSkeleton komponenssel jelenít meg helyőrzőket.

import { useState, useEffect } from 'react';
import CustomSkeleton from '@/components/Skeleton/Skeleton.component';

export default function UserProfileWithLoading() {
const [user, setUser] = useState<{ username: string; email: string } | null>(null);
const [loading, setLoading] = useState(true);

useEffect(() => {
const fetchUserData = async () => {
setLoading(true);
await new Promise(resolve => setTimeout(resolve, 2000)); // Adatbetöltés szimulálása
setUser({ username: "Példa Felhasználó", email: "[email protected]" });
setLoading(false);
};
fetchUserData();
}, []);

return (
<div style={{ padding: '20px' }}>
{loading ? (
<div>
<CustomSkeleton format={["title"]} /> {/* Váz a felhasználónévnek */}
<CustomSkeleton format={["description"]} /> {/* Váz az email címnek */}
<CustomSkeleton format={["description", "description", "title"]} /> {/* Váz további szekcióknak */}
</div>
) : (
<div>
<h1 className="user-page-title">{user?.username}</h1>
<span className="user-email">{user?.email}</span>
<p>Ez itt egy valós adatblokk.</p>
<p>És még egy.</p>
</div>
)}
</div>
);
}

A CustomSkeleton segít abban, hogy a felhasználók számára jobb élményt nyújtsunk az adatok betöltése közben, mivel vizuális visszajelzést adnak arról, hogy a tartalom hamarosan megérkezik, és csökkentik a "villódzás" érzését.