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

news2024/9/21 10:29:13

文章目录

  • 前言
  • 基础语法
    • 路由
      • @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; }



}

事件绑定

<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.coloradmin.cn/o/815613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【产品文档】产品测试报告模板

今天和大家免费分享产品测试报告的文档模板。产品测试文档是在软件开发或产品开发过程中所编制的文件&#xff0c;用于记录测试计划、测试用例、测试结果和其他与产品测试相关的信息。它是测试团队或测试人员的重要工具&#xff0c;用于指导和管理测试过程&#xff0c;并与开发…

学网络安全,千万别棋差这一招

下午好&#xff0c;我的网工朋友 总感觉今年云计算的热度比网安高上不少&#xff0c;但网络安全在我心里依然是比较有意思的技术方向。 想学的人很多&#xff0c;想入门的人也很多。但找对方向和方法的人&#xff0c;很少很少。 网络安全到底怎么学&#xff1f; 其实入门这…

程序员有周末吗?

目录 一&#xff1a;周末的时间规划 二、提升周末体验感的好方法 三、一些数据 一&#xff1a;周末的时间规划 程序员有周末吗&#xff0c;是不是有的分大小周&#xff0c;好不容易轮到休息了&#xff0c;单位又搞什么团建&#xff0c;美名曰为了大家的健康。你要是为了大家…

高等数学中如何求渐近线

极限是数学中的一个重要概念&#xff0c;它描述了函数在某一点或无穷远处的行为。而渐近线是指函数图像在无穷远处的一条特殊直线&#xff0c;它与函数图像趋于无穷远时的趋势相似。 求渐近线的方法主要有以下几种&#xff1a; 1. 水平渐近线&#xff1a;当函数在无穷远处的极…

JavaScript作用域详解

目录 前言 什么是作用域 作用域类型 全局作用域 局部作用域 块级作用域 ES6之前 ES6以后 作用域链 变量提升 基础概念 优先级问题 闭包 定义 特点 使用场景 封装私有变量 延长变量周期 模块化、命名空间 缓存 ES6的作用域 const、let 块级作用域 变量提…

[css]margin-top不起作用问题(外边距合并)

在初学css时&#xff0c;会遇到突然间margin-top不起作用的情况。如下面&#xff1a; 情况一&#xff1a; 代码&#xff1a; <html> <head><style type"text/css"> * {margin:0;padding:0;border:0; }#outer {width:300px;height:300px;backgroun…

IPSec配置简介

实验拓扑&#xff1a; 实验目的 &#xff1a; PC1 ping通 PC2 AR1 配置 静态路由 IP route-static 0.0.0.0 0 100.1.12.2 AR3 配置静态路由 IP route-static 0.0.0.0 0 100.1.13.2 AR1 &#xff1a; 一.配置网络密钥交换提议 ike proposal 1 设置身份认证算法为&…

湖北安全员ABC证书电子版哪里下载?安全员证书可以全国通用吗?

湖北安全员ABC目前一个月有一到两批次的考试&#xff0c;需要报考安全员的直接问甘建二就行了&#xff0c;她都可以给您解疑答惑。 湖北安全员ABC证书电子版证书在哪里下载&#xff1f;怎么下载&#xff1f; 湖北安全员ABC证书也都是电子版的证书&#xff0c;直接从网上下载的…

IBM Spectrum Computing 分布式计算解决方案

IBM Spectrum Computing 分布式计算解决方案 Spectrum Computing 概览 20&#xff0b;年的分布式计算行业经验&#xff0c;全球各行业经验的总结和锤炼;全球TOP500企业客户的选择;前瞻性的产品研发路线&#xff0c;定义企业级分布式数据中心架构;成熟的全球ISV合作伙伴生态保…

为什么VPS是中小型企业的理想选择?

对于中小型企业来说&#xff0c;选择适合自身业务需求的托管方案至关重要。在如今数字化时代&#xff0c;VPS作为一种灵活、高性能的托管解决方案&#xff0c;成为中小型企业的理想选择。作为动态VPS代理产品供应商&#xff0c;我们深知一个高质量、高性能的VPS托管服务&#x…

Linux笔记——Linux基础终端命令

系列文章目录 Linux笔记——搜索命令find、解压缩命令、vi编辑器、用户权限命令、系统信息相关命令讲解 Linux笔记——进程管理与网络监控技术讲解 Linux笔记——磁盘进行分区与挂载介绍_linux 挂载分区 Linux笔记——管道相关命令以及shell编程 Linux笔记——rpm与yum下载…

pdf怎么压缩到1m?pdf压缩跟我这样做

在日常工作和学习中&#xff0c;我们常需要处理PDF文件&#xff0c;然而&#xff0c;有时候&#xff0c;PDF文件的大小可能会超过我们的预期&#xff0c;从而导致我们无法通过电子邮件或其他方式发送。这时候&#xff0c;我们就需要对PDF文件进行压缩&#xff0c;以降低其大小。…

vue-router 实现路由懒加载( 动态加载路由 )

在Vue.js中&#xff0c;可以使用vue-router来实现路由懒加载&#xff0c;也称为动态加载路由。路由懒加载的目的是在用户访问某个路由时再加载对应的组件&#xff0c;而不是在应用初始化时一次性加载所有组件。这样可以提高应用的初始加载速度&#xff0c;只在需要时才加载对应…

企业游学进华秋,助力电子产业创新与发展

近日&#xff0c;淘IC企业游学活动&#xff0c;携20多位电子行业的企业家&#xff0c;走进了深圳华秋电子有限公司&#xff08;以下简称“华秋”&#xff09;&#xff0c;进行交流学习、供需对接。华秋董事长兼CEO陈遂佰对华秋的发展历程、业务版块、产业布局等做了详尽的介绍&…

Maven 打包项目后,接口识别中文乱码

背景 项目在Idea里面运行&#xff0c;调用接口发送中文消息正常&#xff0c;用Maven打包项目后&#xff0c;运行jar包&#xff0c;调用接口发送中文出现乱码。 解决方法 1.Idea编译配置 2.如果更改了上述配置之后还是没有效果&#xff0c;则在运行jar包的前面加上 -Dfile.en…

IDEA Debug小技巧 添加减少所查看变量、查看不同线程

问题 IDEA的Debug肯定都用过。它下面显示的变量&#xff0c;有什么门道&#xff1f;可以增加变量、查看线程吗&#xff1f; 答案是&#xff1a;可以。 演示代码 代码如下&#xff1a; package cn.itcast.attempt.threadAttempt.attempt2;public class Test {public static …

码力全开!请查收HDC.Together 2023亮点日程

<主题演讲> <技术交流与互动> <妙趣之旅> 点击关注阅读原文&#xff0c;了解更多资讯

Debian/Ubuntu 安装 Chrome 和 Chrome Driver 并使用 selenium 自动化测试

截至目前&#xff0c;Chrome 仍是最好用的浏览器&#xff0c;没有之一。Chrome 不仅是日常使用的利器&#xff0c;通过 Chrome Driver 驱动和 selenium 等工具包&#xff0c;在执行自动任务中也是一绝。相信大家对 selenium 在 Windows 的配置使用已经有所了解了&#xff0c;下…

揭开高级产品经理思维的秘密

我经常被问到产品经理如何晋升到更高级别。事实上&#xff0c;获得晋升往往是一场复杂的游戏。是的&#xff0c;你的技能和成就很重要&#xff0c;但其他因素也很重要&#xff0c;比如你的经理对人才培养的关心程度、你的同事有多优秀、任期有多长、公司的政治氛围如何等等。 所…

大学生竞赛管理系统springboot比赛报名信息java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 大学生竞赛管理系统springboot 系统有3权限&#xff…