【问题标题】:When to call long-running ops for Blazor component?何时为 Blazor 组件调用长时间运行的操作?
【发布时间】:2020-10-25 23:49:38
【问题描述】:

这是我在 Blazor 服务器应用程序中一直在做的事情——几乎每个页面都需要通过调用 API 来加载一些内容。我一直在 OnInitializedAsync() 方法中添加这个异步函数。

但是,最近,我一直在阅读文章,认为这不是正确的地方。它应该在 OnAfterRenderAsync() 事件中完成。这是一篇文章在底部谈论它:SpinKit Loading

我想知道我做错了吗?如果是这样,为什么?任何初始页面数据获取都应该在 OnAfterRenderAsync() 中完成吗?

谢谢!

【问题讨论】:

标签: blazor blazor-server-side


【解决方案1】:

如果您正在调用 JavsScript,您只需在 OnAfterRenderAsync 中调用它。如果您没有任何 [Parameet] 属性,或者您只需要调用一次 API,那么 OnInitializedAsync 就可以了。如果是带有路由参数的页面,或者是带有[Parameter]属性的组件,并且API的调用依赖于这些属性,则需要在SetParametersAsync中调用。

【讨论】:

    【解决方案2】:

    正如您所知,在 Blazor 服务器应用程序中,每个生命周期方法都会被调用两次,因此最佳实践是调用数据库、长时间运行的计算和调用 JavaScript 将在 OnAfterRenderAsync/OnAfterRender 方法中,使用 firstRender 标志检查它是否第一次呈现,否则调用数据库/长时间运行的计算将被调用不必要的两次。例如

    protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            if (firstRender)
            {
                   // calling database/long-running calculation/calling JavaScript
            }
        }
    

    如果您想了解有关方法生命周期的更多信息:https://docs.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-3.1

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2011-01-10
      • 2011-11-30
      • 2018-04-28
      • 1970-01-01
      • 2010-10-21
      • 2012-09-29
      • 2018-11-24
      相关资源
      最近更新 更多