惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
爱范儿
爱范儿
博客园 - 聂微东
美团技术团队
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
云风的 BLOG
云风的 BLOG
罗磊的独立博客
V
Visual Studio Blog
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 毛毛虫

[Maui] 轮子——插件式开发 [Maui] Windows部署 [Maui] 造轮子——LoggerSqlite [Maui] 造轮子——Exception处理 [Maui] 造轮子——MessageBox [Maui] 造轮子——前言、本地化 [C#] 日积月累 [.net10] 极简数据库对象关系映射 [C#] 扩展Enumerable,实现类似Sqlserver的窗口函数lag [Blazor] 学习随笔——呈现约定 [Blazor] 学习随笔——RZ10012警告的处理 [Blazor WebAssembly] 学习随笔——组件1.微信弹框(WXDialog) [Blazor WebAssembly] 学习随笔——身份验证 Asp.net Help ASP.NET Web 应用 Docker踩坑历程——续 [Net6]自己写个消息推送 Docker批处理笔记 Asp.net6.0 Swagger使用备忘 ASP.NET Web 应用 Docker踩坑历程
[Blazor] 学习随笔——生命周期
毛毛虫 · 2024-03-25 · via 博客园 - 毛毛虫

微软文档ASP.NET Core Razor 组件生命周期,中文都认识,意思不是太明白,故做了一些测试。

OnInitialized与OnInitializedAsync

@page "/"

@foreach (var item in Items)
{
    @item
    <hr />
}

@code {
    List<int> Items = default!;

    protected override void OnInitialized()
    {
        Items = Enumerable.Range(0, 10).ToList();
    }
}

能正确运行

  1. 运行 OnInitialized
  2. 运行 @foreach
@page "/"

@foreach (var item in Items)
{
    @item
    <hr />
}

@code {
    List<int> Items = default!;

    protected override  async Task  OnInitializedAsync()
    {
        Items = Enumerable.Range(0, 10).ToList();
        await Task.Delay(1);
//do Something
    }
}

也能正确运行

  1. 运行 OnInitializedAsync 到await ...
  2. 运行 @foreach
  3. 运行 OnInitializedAsync 的do something
@page "/"

@foreach (var item in Items)
{
    @item
    <hr />
}

@code {
    List<int> Items = default!;

    protected override  async Task  OnInitializedAsync()
    {
        await Task.Delay(1);
        Items = Enumerable.Range(0, 10).ToList();
    }
}

出错了,@foreach语句Items为空

  1. 运行 OnInitializedAsync 到await ...
  2. 运行 @foreach,Items尚未赋值,出错

所以,异步的写法必须如下:

@page "/"
@if (Items is not null)
{
    foreach (var item in Items)
    {
        @item
        <hr />
    }
}

@code {
    List<int> Items = default!;

    protected override async Task OnInitializedAsync()
    {
        await Task.Delay(1);
        Items = Enumerable.Range(0, 10).ToList();
    }

}