Это компонент меню, который находится в MainLayout. Теги H5 появляются и исчезают в мгновение ока, а затем через 4 секунды. Он снова загружается. Кто-нибудь встречает такую же проблему?
<ul class="nav-title">
<li class="brands">
<div class="menu-dropdown sb-2">
@foreach (var brand in Brands)
{
<div class="nav-column">
<h5>@brand.Header</h5>
<ul>
@foreach (var item in brand.Items)
{
<li>@item.Id</li>
}
</ul>
</div>
}
</div>
</li>
</ul>
@code {
private List<BrandModel> Brands { get; set; } = new List<BrandModel>();
private List<CategoryModel> Categories { get; set; } = new List<CategoryModel>();
private List<ColorModel> Colors { get; set; } = new List<ColorModel>();
protected override async Task OnInitializedAsync()
{
Brands = await HeaderNavComponentService.GetBrandAsync();
Categories = await HeaderNavComponentService.GetCategoryAsync();
Colors = await HeaderNavComponentService.GetColorAsync();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JS.InvokeVoidAsync("lazyLoadNav");
}
}
}
Обновите ответ @enet:
render-mode = "Server" отключает мигание, и задержка остается.
Я действительно хочу загружать данные как можно быстрее. Скорость предварительного рендера - это именно та, которую я хочу. В этом мигании он также получает значение, полученное из службы. Мне просто не нравится та часть, которая исчезает и загружается обратно по прошествии времени, когда ни одна строка кода не сообщает приложению о таком поведении.
Поскольку эта проблема возникает, я предполагаю, что любые динамические компоненты будут иметь минимальное мертвое время (2 секунды + время загрузки данных) из-за отсутствия данных.
Это действительно грустный UX, хотя приходится ждать некоторое время, чтобы иметь возможность посмотреть список навигации. Похоже, мой план использовать Blazor для нового проекта нарушен :(
Обновление ответа Хенка:
На самом деле для меня не имеет смысла ставить StateHasChange () после каждой присвоенной переменной, что могло бы помочь, но это помогло. Но все еще мерцает.
Затем я меняю render-mode = "Server", и результатом является ожидаемое поведение, при котором больше не будет мерцания, данные быстро привязываются к пользовательскому интерфейсу.
Итак, я думаю, что бы вы ни делали, OnInitialize будет запускаться дважды, просто он не будет привязываться к пользовательскому интерфейсу на этапе предварительного рендеринга, если режим рендеринга помещен на сервер.