OnAfterRenderAsync未被触发。

问题描述 投票:1回答:1

我想弄明白为什么我无法在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))


为什么事件没有被触发?

blazor
1个回答
0
投票

它们都被调用了,只是没有被渲染。

做这个小改动,你的屏幕会一直循环更新。

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
}
© www.soinside.com 2019 - 2024. All rights reserved.