0

0

Blazor OnInitializedAsync 方法使用教程

畫卷琴夢

畫卷琴夢

发布时间:2025-12-12 11:11:02

|

601人浏览过

|

来源于php中文网

原创

OnInitializedAsync是Blazor组件首次渲染前执行一次异步初始化的核心方法,适用于加载数据、验权、读取配置等;SSR模式下需判别运行环境避免浏览器API调用错误,且不可与OnParametersSetAsync混淆。

blazor oninitializedasync 方法使用教程

Blazor 中的 OnInitializedAsync 是组件初始化阶段执行异步逻辑的核心入口,适合加载初始数据、检查用户权限、读取配置等操作。 它在组件首次渲染前调用,且只执行一次(服务端渲染 SSR 模式下需注意两次调用问题)。正确使用能避免“数据未加载就渲染”或“重复请求”等常见问题

什么时候该用 OnInitializedAsync?

当你需要在组件显示前完成一项或多项异步任务时,比如:

  • 从 API 获取页面主数据(如用户详情、订单列表)
  • 读取本地存储(localStoragesessionStorage)中的用户偏好
  • 调用身份验证服务判断登录状态
  • 初始化依赖服务(如 SignalR 连接、WebSocket)

注意:如果只是同步赋值(如设置默认字段),用 OnInitialized 更轻量;涉及 await 就必须选 OnInitializedAsync

基础写法与注意事项

在组件中重写该方法,返回 Task,内部用 await 调用异步操作:

@code {
    private List products = new();
    private bool isLoading = true;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            products = await ProductService.GetProductsAsync();
        }
        catch (Exception ex)
        {
            // 记录错误,可设 ErrorState 显示提示
            Console.WriteLine($"加载失败: {ex.Message}");
        }
        finally
        {
            isLoading = false;
        }
    }
}

关键点:

  • 不要在方法内直接调用 StateHasChanged() —— Blazor 会在方法结束后自动触发一次渲染
  • 务必处理异常,否则会导致组件初始化失败且无提示
  • 避免在其中做耗时过长的阻塞操作(如大文件解析),应考虑分页或懒加载

服务端渲染(SSR / Static Server Side Rendering)下的陷阱

在 .NET 8+ 启用 SSR 模式时,OnInitializedAsync 可能在服务器端和浏览器端各执行一次:

起航点卡销售系统
起航点卡销售系统

欢迎使用“起航点卡销售系统”销售程序:一、系统优势 1、售卡系统采取了会员与非会员相结合的销售方法,客户无需注册即可购卡,亦可注册会员购卡。 2、购卡速度快,整个购卡或过程只需二步即可取卡,让客户感受超快的取卡方式! 3、批量加卡功能。 4、取卡方式:网上支付,即时取卡 ,30秒可完成交易。 5、加密方式:MD5 32位不可倒推加密 6、防止跨站

下载
  • 服务器端执行:生成 HTML 快照,但此时无法访问浏览器 API(如 localStorageNavigationManager
  • 浏览器端再次执行:接管交互,此时才可安全使用前端能力

解决方案是加运行环境判断:

protected override async Task OnInitializedAsync()
{
    if (IsServerSide)
    {
        // 仅服务器端执行:查数据库、读配置等
        data = await ServerService.LoadDataAsync();
    }
    else
    {
        // 仅客户端执行:读 localStorage、发带凭据的 API 请求等
        preferences = await LocalStorage.GetItemAsync("prefs");
    }
}

@code {
    [CascadingParameter] private HttpContext? HttpContext { get; set; }
    private bool IsServerSide => HttpContext is not null;
}

替代方案对比:OnParametersSetAsync vs OnInitializedAsync

别混淆这两个生命周期方法:

  • OnInitializedAsync:组件首次创建时调用,参数已注入但尚未变更,适合一次性初始化
  • OnParametersSetAsync:每次父组件传入参数变化时都触发,适合响应参数更新(如路由参数 [Parameter] public string Id { get; set; } 改变后重新加载详情)

如果组件支持复用(如路由参数变化不重建组件),仅靠 OnInitializedAsync 无法捕获后续参数变化,此时应在 OnParametersSetAsync 中补充逻辑或统一在后者中处理。

基本上就这些。用对时机、避开 SSR 陷阱、配合状态管理,OnInitializedAsync 就能稳稳撑起 Blazor 组件的数据起点。

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

616

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

658

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

471

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

245

2023.08.01

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2898

2023.08.11

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

507

2023.08.11

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

312

2023.08.31

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

426

2023.09.01

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

6

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.8万人学习

CSS教程
CSS教程

共754课时 | 22.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号