当前位置: 首页 > news >正文

C# Blazor 学习笔记(1):Blazor基础语法,组件化和生命周期

文章目录

  • 前言
  • 基础语法
    • 路由
      • @Page
    • 页面元素条件生成
      • @if / else
      • @for
      • @foreach
    • 绑定
      • 参数绑定(赋值,单向)
      • 参数绑定(双向)
      • 事件绑定
      • 字典绑定 @attributes
    • 组件化
      • 如何使用
      • @Parameter 参数注入
      • 使用
      • 回调函数
        • 组件声明回调
        • 组件注入回调
        • 组件触发回调
      • 直接控制 @ref
    • 生命周期
      • App起始阶段:
      • 生命周期钩子阶段:
      • App终止阶段:
    • 调试
      • 热重置
      • 控制台输出

前言

这里我们会讲解Blazor的基础语法和简单组件化使用

Blazor 常用语法介绍

基础语法

路由

@Page

路由位置

@page "/fetchdata"

页面元素条件生成

@if / else

@if (forecasts == null)
{<p><em>Loading...</em></p>
}
else
{<table class="table"><thead><tr><th>Date</th><th>Temp. (C)</th><th>Temp. (F)</th><th>Summary</th></tr></thead></table>
}

@for

@for(var i = 0;i< 10; i++)
{<text>我是text @i</text>
}

@foreach

@foreach (var forecast in forecasts){<tr><td>@forecast.Date.ToShortDateString()</td><td>@forecast.TemperatureC</td><td>@forecast.TemperatureF</td><td>@forecast.Summary</td></tr>}

绑定

参数绑定(赋值,单向)

<input title="@Title" value="@Value"  />@code {[Parameter]public string Title{ get; set; }[Parameter]public string Value { get; set; }}

参数绑定(双向)

<input @bind="Title" />@code {public string Title{ get; set; }
}

事件绑定

<button @onclick="ShowTest"/>@code {public void ShowTest(){Console.WriteLine("我被按钮点击了");}
}

字典绑定 @attributes

简化控件的属性绑定


<input @attributes="InputList" />
//等价于 <input title="我的标题" value = "10" />
@code {public Dictionary<string, object> InputList { get; set; } = new Dictionary<string, object>(){{"title","我的标题"},{"value","10"}};
}

组件化

  • 只有razor才能组件化
  • razor文件名首字母必须大写
  • 不需要注入,可以直接使用组件。所以为了避免文件名冲突,所以要规范化命名

如何使用

在这里插入图片描述

@Parameter 参数注入

参数注入支持多参数

  • 普通数据类型
  • List类型
  • Action委托
@code {[Parameter]public string Title{ get; set; }[Parameter]public string Value { get; set; }[Parameter]public List<string> TestList { get; set; } = new List<string>();}

使用

<Test Title="我是测试的标题" Value="数值" TestList="@strList"/>@code{public List<string> strList = new List<string>(){};protected override Task OnInitializedAsync(){for(var i = 0;i < 10; i++){strList.Add("我是标题" + i);}return base.OnInitializedAsync();}}

回调函数

组件声明回调

Test.Razor里面

    [Parameter]public EventCallback<string> OnClick{ get; set; }//string是回调的返回参数

组件注入回调

引用组件


<Test  OnClick="TestBtn"/>@code{//注意,注入的函数的参数和回调的参数要保持一致public void TestBtn(string msg){Console.WriteLine("我接收到了回调"+msg);}}

组件触发回调

Test.razor


<button @onclick="ShowTest"/>
@code {[Parameter]public EventCallback<string> OnClick{ get; set; }//通过按钮事件触发回调,这样引用的页面就会触发回调函数public void ShowTest(){OnClick.InvokeAsync("点击回调函数");}}

直接控制 @ref

使用@ref 直接控制组件元素

Test是我们定义的组件

//通过@ref直接使用组件
<Test @ref="myTest"  OnClick="TestBtn"/>@code{//先声明组件private Test myTest { get; set; }//通过某种方式调用组件,我这里是用按钮点击public void TestBtn(string msg){myTest.Title = "我直接操控修改了Title";myTest.TestBtn();Console.WriteLine("我接收到了回调"+msg);}}

生命周期

App起始阶段:

在这个阶段,Blazor应用程序初始化并加载所需要的资源。

  • OnInitializeAsync:
    • 当应用程序初始化时调用,通常用于执行一些初始化操作。
      组件渲染阶段:在这个阶段,组件将被渲染并呈现到用户界面中。
  • OnParametersSet:
    • 在组件接收到新的参数值后调用,可以在此方法中执行与参数相关的操作。
      OnAfterRender:在组件渲染到屏幕后调用,可以在此方法中执行与DOM操作相关的操作。

生命周期钩子阶段:

在这个阶段,Blazor提供了一些特定的生命周期钩子方法,可以用于执行一些特定的操作。

  • OnInitialized:
    • 在组件初始化完成后调用,可以在此方法中执行一些初始化逻辑。
  • OnAfterRenderAsync:
    • 在组件渲染到屏幕后调用,可以在此方法中执行异步操作。
  • OnParametersSetAsync:
    • 在组件接收到新的参数值后调用,可以在此方法中执行异步操作。

App终止阶段:

在这个阶段,Blazor应用程序将完成并进行清理工作。

  • OnDispose:
    • 当组件从DOM中移除时调用,可以在此方法中执行一些清理逻辑。

调试

热重置

在这里插入图片描述

控制台输出

因为用的是C#而不是JS。所以无法直接使用JS的console.log方法。但是可以使用C#的Console.WriteLine()

打印在运行的控制台里面

在这里插入图片描述

http://www.lryc.cn/news/103797.html

相关文章:

  • flutter 导出iOS问题2
  • syn报文什么时候会被丢弃?
  • 【C++】开源:Linux端V4L2视频设备库
  • 基于数据驱动的多尺度表示的信号去噪统计方法研究(Matlab代码实现)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?
  • 伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓+IOS前端纯原生源码
  • C++推理
  • Day10-作业(SpringBootWeb案例)
  • 源码阅读:p-limit
  • 目标检测-击穿黑夜的PE-YOLO
  • 优化性能压力测试的关键策略和技巧
  • VMware Linux 可视化增加磁盘
  • 从 axios 源码学习设计模式
  • 输出不同程序执行的时间
  • HDU 6391 组合数学 + DP
  • StopWatch与ThreadLocal
  • 20. 有效的括号
  • 微信小程序原生写法传递参数
  • JavaWeb+jsp+Tomcat的教务查询系统
  • C# FTP下载 采用Ssh.Net方式
  • 【C++】做一个飞机空战小游戏(三)——模块化程序设计
  • Django使用WebSocket
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——HarryPotter:Nagini
  • IPO要收紧?业内人士未予以完全确认
  • stable difussion Pytorch实现与测试
  • Redis简述
  • Redis 操作List
  • 多个List 合并变成一个List+一个List 根据某个字段相等的另一个字段相加,并排序变成新的List
  • 华为流程体系:流程架构「OES方法」
  • c# 创建一个未定义类的临时对象列表