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

前言

这里我们会讲解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()

打印在运行的控制台里面

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Blazor WebAssembly或Blazor Server来展示日志。下面是一些实现方式: 1. 使用Blazor WebAssembly 您可以将日志作为对象注入到您的服务中,然后将其绑定到UI组件以显示。以下是一个示例: 在Startup.cs文件中,注入日志服务: ```csharp services.AddSingleton<ILoggerService, LoggerService>(); ``` 创建LoggerService类,该类包含记录日志的方法: ```csharp public class LoggerService : ILoggerService { private List<LogEntry> logs = new List<LogEntry>(); public void Log(string message) { logs.Add(new LogEntry { Message = message, Timestamp = DateTime.Now }); } public List<LogEntry> GetLogs() { return logs; } } public class LogEntry { public string Message { get; set; } public DateTime Timestamp { get; set; } } ``` 在Blazor组件中,绑定日志数据: ```csharp @page "/log" <h3>Log</h3> <ul> @foreach (var log in logs) { <li>@log.Timestamp.ToString() - @log.Message</li> } </ul> @code { private List<LogEntry> logs; protected override void OnInitialized() { logs = loggerService.GetLogs(); } [Inject] private ILoggerService loggerService { get; set; } } ``` 2. 使用Blazor Server 在Blazor Server中,您可以使用SignalR连接到服务器,然后通过SignalR获取日志数据。以下是一个示例: 在Startup.cs文件中,注入日志服务: ```csharp services.AddSingleton<ILoggerService, LoggerService>(); ``` 创建LoggerService类,该类包含记录日志的方法: ```csharp public class LoggerService : ILoggerService { private List<LogEntry> logs = new List<LogEntry>(); public void Log(string message) { logs.Add(new LogEntry { Message = message, Timestamp = DateTime.Now }); } public List<LogEntry> GetLogs() { return logs; } } public class LogEntry { public string Message { get; set; } public DateTime Timestamp { get; set; } } ``` 在Blazor组件中,使用SignalR获取日志数据: ```csharp @page "/log" <h3>Log</h3> <ul> @foreach (var log in logs) { <li>@log.Timestamp.ToString() - @log.Message</li> } </ul> @code { private List<LogEntry> logs; protected override async Task OnInitializedAsync() { logs = await hubConnection.InvokeAsync<List<LogEntry>>("GetLogs"); } [Inject] private HubConnection hubConnection { get; set; } } ``` 在服务端创建SignalR Hub,该Hub将日志数据发送到客户端: ```csharp public class LogHub : Hub { private readonly ILoggerService loggerService; public LogHub(ILoggerService loggerService) { this.loggerService = loggerService; } public async Task<List<LogEntry>> GetLogs() { return loggerService.GetLogs(); } } ``` 在Startup.cs文件中,配置SignalR: ```csharp services.AddSignalR(); app.UseEndpoints(endpoints => { endpoints.MapHub<LogHub>("/loghub"); }); ``` 请注意,这只是展示日志的基本示例,您可能需要根据您的实际需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值