Open sulmar opened 3 weeks ago
W Blazor Server metoda OnInitializedAsync
może być wywoływana dwa razy z powodu procesu renderowania komponentu, szczególnie przy użyciu określonych trybów renderowania lub procesów rehydratacji. Oto najczęstsze przyczyny podwójnego wywoływania OnInitializedAsync w Twoim kodzie:
OnInitializedAsync
jest wywoływany zarówno podczas wstępnego renderowania, jak i podczas renderowania interaktywnego, co skutkuje dwoma wywołaniami. Takie działanie jest zamierzone, ponieważ Blazor najpierw renderuje zawartość wstępnie (dla lepszego SEO lub szybszego pierwszego ładowania), a następnie ładuje interaktywną zawartość.Oto jak zmodyfikować kod:
@page "/customers"
@inject ICustomerRepository Repository
@rendermode InteractiveServer
<h3>Lista</h3>
@if (customers is null)
{
<p>Ładowanie klientów...</p>
}
else
{
<ul>
@foreach (var customer in customers)
{
<li>@customer.Name @customer.Id</li>
}
</ul>
}
@code {
private IEnumerable<Customer> customers;
private bool isInitialized = false;
protected override async Task OnInitializedAsync()
{
if (!isInitialized)
{
await Task.Delay(10_000);
customers = await Repository.GetAllAsync();
isInitialized = true;
}
}
}
W ten sposób OnInitializedAsync
pobiera dane tylko raz, niezależnie od tego, ile razy komponent zostanie ponownie wyrenderowany.
Dlaczego mając następujący kod metoda
OnInitializedAsync
wywoływana jest dwa razy?