我有一个Blazor WASM项目,它的属性最初是在OnInitializedAsync((方法中设置的。所有操作都很好,但如果我点击浏览器刷新按钮,我会得到"Object not set"错误,因为所有属性都被重置,并且当你点击浏览器刷新键时,OnInitializedAsync((似乎不会运行。在这种情况下,如何重新初始化属性?有没有一个方法应该代替OnInitializedAsync((使用?
感谢
我也遇到了类似的问题,使用生命周期事件OnParametersSet{Async}
也起了作用。
protected override void OnParametersSet()
{
}
或
protected override async Task OnParametersSetAsync()
{
await ...
}
https://learn.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-5.0#在parameterssetasync 上设置参数后
出于某种原因,在使用刷新按钮时没有被击中,但我可以";技巧";使用CCD_ 2而不是通过浏览器刷新系统,然后我可以调试发生的一切。
路由的有用链接:
https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-5.0
到目前为止,我认为OP和回复之间存在误解/沟通错误。情况如下:
每个Blazor页面或组件都有自己的OnInitializedAsync(以及AfterRenderAsync等(。如果没有显式重写它们,它们将从基类继承它们。
即使在F5刷新之后,每次加载页面时都会调用这些方法。
但我认为误解就在这里:举个例子,你有一个有两条路线的网站。位于"/"路由的Index.razor页面和位于"/MyPage"路由的MyPage.razor页面
如果导航到/mypage,然后按F5键,Index.razor文件的OnInitializedAsync方法将不会被命中。只有MyPage.razor中的一个将是。如果在Index.razor中初始化了其他页面所依赖的重要值,则刷新其中一个页面时会出现问题。
您可以创建一个组件,然后将其从app.razor或_host.razor.级联
组件内部示例
<CascadingValue Value="this">
@ChildContent
</CascadingValue>
@code {
[Parameter]
public RenderFragment ChildContent { get; set; }
protected override void OnInitialized() => Expression.Empty()
}
OnInitializedAsync()
生命周期函数。