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

推荐订阅源

美团技术团队
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
博客园_首页
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
腾讯CDC
罗磊的独立博客
IT之家
IT之家
I
InfoQ
V
V2EX
博客园 - 叶小钗
A
About on SuperTechFans
Y
Y Combinator Blog
C
Check Point Blog
量子位
Martin Fowler
Martin Fowler
Vercel News
Vercel News

博客园 - 毛毛虫

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

}