我想弄明白为什么我无法在Blazor中获得OnAfterRenderAsync方法。
在尝试了多个选项和查看微软文档后,我似乎找不到解决方法,我确信我遗漏了什么,但我想不出问题出在哪里。
在下面的代码中,OnInit函数被调用,但渲染函数却没有。
<h1>OnInit & OnInitAsync Demo</h1>
@foreach (var item in EventType)
{
@item
<hr />
}
@code{
List<string> EventType = new List<string>();
protected override void OnInitialized()
{
EventType.Add("Initilaized");
}
protected override void OnAfterRender(bool firstRender)
{
EventType.Add("OnAfterRender is called");
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
EventType.Add("OnAfterRenderAsync is called");
await Task.Delay(1000);
}
}
这是我的.csproj文件
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
这是我的_Host.cshtml。
<app>
<component type="typeof(App)" render-mode="ServerPrerendered" />
</app>
我也试过这样做
@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))
为什么事件没有被触发?
它们都被调用了,只是没有被渲染。
做这个小改动,你的屏幕会一直循环更新。
protected override async Task OnAfterRenderAsync(bool firstRender)
{
EventType.Add("OnAfterRenderAsync is called " + firstRender);
await Task.Delay(1000);
StateHasChanged(); // inform the system that the screen needs updating
}