再学Blazor——组件
Blazor 应用基于组件,组件可以复用和嵌套。本文内容如下:
- 组件类
- 组件嵌套
- 组件参数
- 组件对象
1. 组件类
所有组件都是继承 ComponentBase 组件基类,razor 文件默认继承 ComponentBase 类。 ComponentBase 实现组件的最低抽象,IComponent 接口。 ComponentBase 定义基本功能的组件属性和方法,例如,处理一组内置组件生命周期事件。
//HTML 写法
MyComponent.razor
<div>Hello Known!</div>
//C# 写法
class MyComponent : ComponentBase
{
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.Div("Hello Known!");
}
}
2. 组件嵌套
组件可以包含其他组件。用 HTML 语法,组件的标记类似于 HTML 标记,其中标记的名称是组件类型。
//HTML 写法
MyApp.razor
<MyComponent />
C# 高级写法是通过扩展方法来实现的。
//C# 写法
class MyApp : ComponentBase
{
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.Component<MyComponent>().Build();
}
}
3. 组件参数
Blazor 应用是由若干组件拼搭而成,有些组件结构相同,数据不同,这样的组件就需要添加组件参数属性将数据传递给组件。组件参数需满足如下条件:
- 需要包含 [Parameter] 特性
- 必须是 public 的属性
class MyComponent : ComponentBase
{
[Parameter] public string? Title { get; set; }
//子内容呈现片段
[Parameter] public RenderFragment? ChildContent { get; set; }
protected override void BuildRenderTree(RenderTreeBuilder builder) { ... }
}
下面是组件参数的使用示例
//HTML 写法
MyApp.razor
<div>
<MyComponent Title="组件1" />
<MyComponent Title="组件2">
子内容呈现
</MyComponent>
</div>
//C# 写法
class MyApp : ComponentBase
{
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.Div(attr =>
{
builder.Component<MyComponent>().Set(c => c.Title, "组件1").Build();
builder.Component<MyComponent>()
.Set(c => c.Title, "组件2")
.Set(c => c.ChildContent, b => b.Text("子内容呈现"))
.Build();
});
}
}
4. 组件对象
组件是继承 ComponentBase 的一个类,如果要访问组件的方法,必须获取组件的对象实例。若要捕获组件对象实例,请执行以下操作:
- 向子组件添加 @ref 特性
- 定义与子组件类型相同的字段
//HTML 写法
MyApp.razor
<div>
<MyComponent @ref="component" Title="组件1" />
</div>
@code {
private MyComponent? component;
}
C# 高级写法是在组件建造者 ComponentBuilder 类的 Build 方法中通过 AddComponentReferenceCapture 方法来捕获组件对象实例,该类不是 Blazor 框架类,后续将介绍该类的具体实现。
//C# 写法
class MyApp : ComponentBase
{
private MyComponent? component;
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.Div(attr =>
{
builder.Component<MyComponent>()
.Set(c => c.Title, "组件1")
.Build(value => component = value);
});
}
}
再学Blazor——组件的更多相关文章
- Blazor组件的new使用方式与动态弹窗
1. 前言 在Blazor中的无状态组件文中,我提到了无状态组件中,有人提到这个没有diff,在渲染复杂model时,性能可能会更差.确实,这一点确实是会存在的.以上文的方式来实现无状态组件,确实只要 ...
- 再聊 Blazor,它是否值得你花时间学习
之前写了一篇文章<快速了解 ASP.NET Core Blazor>,大家关心最多的问题是,我该不该花时间去学习 Blazor.今天聊聊这个话题,并表达一下我个人的看法. 在此之前,我还是 ...
- Ant Design Blazor 组件库的路由复用多标签页介绍
最近,在 Ant Design Blazor 组件库中实现多标签页组件的呼声日益高涨.于是,我利用周末时间,结合 Blazor 内置路由组件实现了基于 Tabs 组件的 ReuseTabs 组件. 前 ...
- Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)
接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...
- Blazor组件自做一 : 使用JS隔离封装viewerjs库
Viewer.js库是一个实用的js库,用于图片浏览,放大缩小翻转幻灯片播放等实用操作 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazo ...
- Blazor组件自做二 : 使用JS隔离制作手写签名组件
Blazor组件自做二 : 使用JS隔离制作手写签名组件 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazor组件自做一 : 使用JS隔离 ...
- Blazor组件自做三 : 使用JS隔离封装ZXing扫码
Blazor组件自做三 : 使用JS隔离封装ZXing扫码 本文基础步骤参考前两篇文章 Blazor组件自做一 : 使用JS隔离封装viewerjs库 Blazor组件自做二 : 使用JS隔离制作手写 ...
- 【C】 01 - 再学C语言
“C语言还用再学吗?嵌入式工程师可是每天都在用它,大家早就烂熟于心,脱离语言这个层面了”.这样说不无道理,这门古老的语言以其简单的语法.自由的形式的而著称.使用C完成工作并不会造成太大困扰,所以很少有 ...
- [Python]再学 socket 之非阻塞 Server
再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...
- 再学Java 之 interface的成员变量
前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...
随机推荐
- 通过ssh远程执行kubectl命令报错问题
在使用Jenkins链接Kubernetes集群,如果Jenkins安装机器与Kubernetes Master节点不在同一台机器上面,需要使用ssh远程执行部署命令,如下: ssh root@10. ...
- fdisk 命令 创建分区 实现扩容
fdisk 命令 创建分区 实现扩容 Linux fdisk命令简介 Linux fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表.BSD 或者 SUN 类型的磁盘列表. 菜单操 ...
- 【WebSocket】多节点下WebSocket消息收发解决案例
单体Webscoket springboot版本: 2.1.1.RELEASE jdk: 1.8 示例代码 WebsocketServer @ServerEndpoint("/client/ ...
- 【Python】数据可视化利器PyCharts在测试工作中的应用
PyCharts 简介 PyCharts 是一个基于 Python 的数据可视化库,它支持多种图表类型,如折线图.柱状图.饼图等.PyCharts 提供了简洁的 API,使得用户能够轻松地创建各种图表 ...
- 【Kubernetes】kubectl常用命令手册 -- 持续更新
元信息 api列表: kubectl api-resources kubectl api-resources -o wide 用法查询: kubectl explain <>.<&g ...
- 防缓存穿透利器-布隆滤器(BloomFilter)
布隆过滤器 1.布隆过滤器原理 1.1 什么是布隆过滤器 1.2 使用场景 1.3 原理 1.4 布隆过滤器的优缺点 2.实现方式 2.1 初始化skuId的布隆过滤器 2.1.1 RedisCons ...
- Redis设计
目录 过期键删除策略 持久化 RDB AOF AOF重写 主从复制 完整重同步和部分重同步 哨兵Sentinel 哨兵对redis服务器集群的监听 执行者选举 故障转移 选择新的主服务器流程 过期键删 ...
- 理解TCP3次握手
以AB通话为例 A的视角 A给B打电话,进入SYN_SENT B接起电话,A确认后,进入ESTABLISHED B的视角 看到A打过来的电话,接起电话,进入SYN_RCVD 确认对方后,进入ESTAB ...
- Mysql高级4-索引的使用规则
一.最左前缀法则 如果索引了多列(联合索引),要遵守最左前缀法则.最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将部分失效(后面的字段索引失效) 示例1:acco ...
- Module build failed: TypeError: this.getOptions is not a function at Object.loader
这个问题主要是因为node-loader版本过高导致的问题 解决方案 css-loader降为3.6.0版本即可 npm install css-loader@2.0.2 --save-dev npm ...