Blazor组件可用性时刻



注意:在这个问题中,我使用了一个特定的组件,但我想我的问题与我对blazor页面的一般方法有关,而不是与这个特定的组件有关

我有一个Blazor WebAssembly应用程序,页面如下:

第页。剃刀

@page "/mypage"
<h3>Title</h3>
<BlazorSlickCarousel @ref="carVp" Configurations="carVpConf">
<BlazorSlickCarouselContent>
</BlazorSlickCarouselContent>
<BlazorSlickCarouselLoading>
</BlazorSlickCarouselLoading>
</BlazorSlickCarousel>

page.rarzor.cs

using WMBlazorSlickCarousel.WMBSC;
private BlazorSlickCarousel carVp;
private WMBSCInitialSettings carVpConf;
private bool cond = true;
protected override void OnInitialized()
{
carVpConf = new WMBSCInitialSettings(){ /* some options */ };
}
protected override async Task OnParametersSetAsync()
{
if (cond)
{
/* do nothing */
}
else
{
/* await time consuming task */
}
await PopulateCarousel();
}
public async Task PopulateCarousel()
{
var div = $@"<div class='vs-container'>Some stuff</div>";
for(int i = 1; i <= 3; i++)
{
await carVp.Add(div);
}
}

如果cond == truePopulateCarousel()的行为是不可预测的:有时会抛出ArgumentNullException,有时不会将所有div都添加到转盘中。

如果cond == false,则一切正常。

我想当cond == true时,carVp组件还没有(完全(创建/初始化。事实上,如果我给第一个If分支添加一点延迟(使用await Task.Run(() => Task.Delay(1000));,一切都很好

问题是:我应该把对PopulateCarousel()的调用放在哪里,以确保组件已完全创建和初始化?是否有一种(通用(方法来检查组件状态?

我尝试了OnInitializedAsyncOnAfterRenderAsyncOnAfterRender,但都不起作用。

谢谢!

组件生命周期事件按以下顺序触发

OnInitialized----->OnParametersSet----->OnAfterRender

正如你所说的";以确保组件已完全创建和初始化&";。当组件UI完全渲染并且可用于访问和更新时,将触发OnAfterRender事件。

相关内容

  • 没有找到相关文章