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

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
Y
Y Combinator Blog
博客园 - 【当耐特】
V
Visual Studio Blog
GbyAI
GbyAI
V
V2EX
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
量子位
MongoDB | Blog
MongoDB | Blog
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件

博客园 - 毛毛虫

[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();
    }

}