【问题标题】:Blazor and Browser page refreshBlazor 和浏览器页面刷新
【发布时间】:2021-04-05 11:12:24
【问题描述】:

我有一个 Blazor WASM 项目,该项目具有最初在 OnInitializedAsync() 方法中设置的属性。一切正常,但如果我点击浏览器刷新按钮,我会收到“未设置对象”错误,因为所有属性都已重置,并且当您点击浏览器刷新按钮时 OnInitializedAsync() 似乎没有运行。在这种情况下如何重新初始化属性?有没有我应该使用的方法来代替 OnInitializedAsync()?

谢谢

【问题讨论】:

  • 为什么你认为它没有在刷新时被调用?我的似乎是……您可以在其中添加控制台登录以进行检查。
  • 你解决过这个问题吗?现在同样的事情正在发生在我身上。到处都有断点并将所有内容都注释掉,所以它只是一个简单的剃​​须刀页面......并且仍然没有在页面的硬重新加载时调用任何生命周期方法。
  • OnInitializedAsync() 显然只在首次初始化时调用,而不是在刷新时调用。经过一番调查,SetParametersAsync() 总是被调用,所以这可能是在这些情况下使用的函数,但不确定是否有任何意外情况使用它。
  • 我为所有函数添加了控制台写入:OnInitializedAsync、SetParametersAsync、OnParametersSetAsync 和 OnAfterRenderAsync。 SetParametersAsync() 是唯一一个在每次刷新和多次导航时都能可靠运行的函数。
  • 我有一个页面 L 用于项目列表和绑定到嵌套路由的 LA,例如用于编辑项目的“/items/edit/id-1”。当我刷新浏览器时不会触发页面 LA 的生命周期事件,但是当我从列表 L 导航到 LA 时会触发它们。我就像 o.O wtf 是这样的,我们应该用这些废话来构建 Web 应用程序吗?! :)

标签: blazor blazor-webassembly


【解决方案1】:

每次刷新浏览器页面或首次渲染组件时都会调用OnInitializedAsync() 生命周期函数。

【讨论】:

  • 问题很清楚地表明由于某种原因没有发生这种情况。
【解决方案2】:

我遇到了类似的问题,并且使用生命周期事件 OnParametersSet{Async} 有效。

protected override void OnParametersSet()
{
}

或者

protected override async Task OnParametersSetAsync()
{
    await ...
}

https://docs.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-5.0#after-parameters-are-set-onparameterssetasync

由于某种原因,使用刷新按钮时没有被击中的断点,但我可以通过使用 NavigationManager.NavigateTo("/mypath/" + id); 而不是通过浏览器刷新来“欺骗”系统,然后我可以调试发生的所有事情。

有用的路由链接:

https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-5.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 2020-08-12
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多