FodVirtualize
Descriere Generală
Componenta FodVirtualize
oferă un wrapper configurabil peste componenta nativă Blazor Virtualize
. Permite randarea eficientă a listelor mari de elemente prin virtualizare, randând doar elementele vizibile în viewport plus un număr configurabil de elemente suplimentare (overscan). Componenta poate fi dezactivată pentru a randa toate elementele simultan când este necesar.
Ghid de Utilizare API
Exemplu de bază
<FodVirtualize Items="@products" IsEnabled="true">
<div class="product-item">
<h4>@context.Name</h4>
<p>@context.Price lei</p>
</div>
</FodVirtualize>
@code {
private List<Product> products = GenerateProducts(1000);
}
Dezactivare virtualizare
<FodVirtualize Items="@items" IsEnabled="false">
<FodListItem>
@context.Title
</FodListItem>
</FodVirtualize>
@code {
private List<Item> items = new();
// Când IsEnabled=false, toate elementele sunt randate
}
Cu overscan personalizat
<FodVirtualize Items="@largeDataSet" IsEnabled="true" OverscanCount="5">
<div class="data-row">
<span>ID: @context.Id</span>
<span>@context.Description</span>
<span>@context.Date.ToShortDateString()</span>
</div>
</FodVirtualize>
@code {
private List<DataItem> largeDataSet = LoadLargeDataSet();
}
În FodDataTable
<FodDataTable>
<FodVirtualize Items="@tableRows" IsEnabled="@enableVirtualization">
<tr>
<td>@context.Column1</td>
<td>@context.Column2</td>
<td>@context.Column3</td>
</tr>
</FodVirtualize>
</FodDataTable>
@code {
private bool enableVirtualization = tableRows.Count > 50;
}
Cu componente complexe
<FodVirtualize Items="@complexItems" IsEnabled="true" OverscanCount="2">
<FodCard Class="mb-3">
<CardContent>
<FodCardTitle>@context.Title</FodCardTitle>
<FodCardText>@context.Content</FodCardText>
<FodButton OnClick="@(() => SelectItem(context))">
Selectează
</FodButton>
</CardContent>
</FodCard>
</FodVirtualize>
Atribute disponibile
Atribut | Tip | Valoare implicită | Descriere |
---|---|---|---|
IsEnabled | bool | false | Activează/dezactivează virtualizarea |
Items | ICollection |
null | Colecția de elemente de afișat |
ChildContent | RenderFragment |
- | Template-ul pentru randarea fiecărui element |
OverscanCount | int | 3 | Numărul de elemente randate în afara viewport-ului |
Evenimente
Componenta nu expune evenimente proprii.
Metode publice
Componenta nu expune metode publice.
Componente asociate
- Virtualize - Componenta nativă Blazor utilizată intern
- Poate fi folosită cu orice componentă FOD pentru afișare liste
Stilizare
Componenta nu adaugă stiluri proprii. Stilizarea se aplică pe elementele randate prin ChildContent
.
Exemplu stilizare
/* Container pentru virtualizare */
.virtualize-container {
height: 500px;
overflow-y: auto;
}
/* Stilizare elemente */
.virtualize-container .item {
padding: 1rem;
border-bottom: 1px solid #e0e0e0;
}
/* Smooth scrolling */
.virtualize-container {
scroll-behavior: smooth;
}
Note și observații
- Performance - Îmbunătățește semnificativ performanța pentru liste mari
- Înălțime fixă - Containerul trebuie să aibă înălțime definită pentru scrolling
- Overscan - Valori mai mari reduc flickering dar cresc memoria folosită
- Generic type - Componenta este generică și funcționează cu orice tip de date
- Fallback - Când IsEnabled=false, folosește un simplu foreach
Bune practici
- Prag activare - Activați virtualizarea doar pentru liste cu peste 50-100 elemente
- Înălțime consistentă - Elementele ar trebui să aibă înălțimi similare pentru scrolling fluid
- OverscanCount - Folosiți 3-5 pentru majoritatea cazurilor
- Container height - Setați întotdeauna înălțimea containerului părinte
- Loading states - Gestionați stările de încărcare pentru date asincrone
Exemple avansate
Cu încărcare dinamică
<div style="height: 600px; overflow-y: auto;">
<FodVirtualize Items="@visibleItems" IsEnabled="true">
@if (context.IsLoading)
{
<FodLoadingLinear />
}
else
{
<ItemDisplay Item="@context" />
}
</FodVirtualize>
</div>
Virtualizare condiționată
@if (UseVirtualization)
{
<FodVirtualize Items="@allItems" IsEnabled="true">
<ItemTemplate Context="@context" />
</FodVirtualize>
}
else
{
<FodPagination Items="@allItems" PageSize="20">
<ItemTemplate Context="@context" />
</FodPagination>
}
@code {
private bool UseVirtualization => allItems.Count > 100;
}
Concluzie
FodVirtualize oferă o soluție flexibilă pentru optimizarea performanței listelor mari în aplicații Blazor. Cu posibilitatea de a activa/dezactiva virtualizarea și control asupra parametrilor de overscan, componenta permite dezvoltatorilor să balanseze între performanță și experiența utilizatorului.