首页 > 其他分享 >再学Blazor——组件

再学Blazor——组件

时间:2023-10-18 09:00:29浏览次数:30  
标签:再学 C# builder ComponentBase HTML 组件 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);
        });
    }
}

标签:再学,C#,builder,ComponentBase,HTML,组件,Blazor,写法
From: https://www.cnblogs.com/known/p/17768830.html

相关文章

  • 29 组件事件传递
    又来就是了之前说props不能子传父,并不完全准确。默认是不可以,但可以额外操作使它具备“子传父”的功能就是传递函数啦,不过是间接的<template><div><!--msg在B组件赋值,然后传回给A-->父级元素:{{msg}}<B:function1="myFunction"/......
  • SvgIcon全局组件---开发环境:vue3+vuecli5
    开发背景nodev18.17.0(node-v)npmv8.4.1(npm-v)@vue/cli5.0.8(vue-V)0.SvgIcon全局组件全局组件是指在应用程序的任何位置使用的组件,使用全局组件前需要在Vus.js实例中注册,并将其挂载到实例中。全局组件是可复用的Vus.js实例。1.安装依赖svg-sprite-loadernpm......
  • 26 组件传递props校验
    基于组件传递,对传输的内容进行校验1.设置默认值default2.必选项require3.传参的类型ps:props是只读的,不能修改......
  • 使用C#中的Panel组件时,它一直按照左上角为基准对齐
    是这里出了问题点击Panel之后,在右边属性列表中就能看见有一个名Anchor为的属性,它默认是Top,Left的定义值;所以Panel才是一直以左上角为基准变化;现在将其改为Bottom属性:然后Panel的排列布局就会下一个挨着上一个的底部啦~如图所示:......
  • C# M2Mqtt组件连接失败后占用大量cpu不释放以及重复用一个client进行重连会出现假连接
    M2Mqtt是C#的一个mqtt客户端库,这个库很好用,但是它有严重的Bug当我们调用Connect建立连接时,如果身份认证失败,它会返回状态码3,即"连接已拒绝,不合格的客户端标识符",但是其内部的异步线程并不会终止,依然会占用大量的cpu资源,即使Disconnect且把client置为null也没用,除非彻底关闭程序......
  • 24 组件传递数据
    组件之间相互传递数据,props只能是,父级组件parent传递数据给子级组件child静态传递动态传递:在静态的基础上,v-bind:{{}}data()返回值,这些结合使用即可<template><!--文本绑定才需要{{}},属性绑定不需要--><Childtitle="静态传递数据":demo="msg"/></te......
  • 23 组件的注册方式
    组件的注册方式:就是组件的引入方式不推荐全局,还得是局部全局,局部:作用域不同全局注册:main.js多次使用的组件就不需要重复麻烦地导入局部注册:就是之前的三步走引入......
  • C#调用WPS的COM组件操作
    本应比较简单直接调用,Office6下面的文件件etapi.dll(excel) ksoapi.dll(office)  wpsapi.dll(word)wppapi(powerpoint) 互操作类型-》false结果是管理员启动(Runas时提示Com组件未注册)  类似 检索COM类工厂中CLSID为{000209FF-0000-4B30-A977-D214852036FE}的组......
  • vue 动态组件
    动态组件:通过component标签的is属性来进行组件的切换.is的属性值决定要显示的组件:  a.将is的属性值设置为data中的值,以便于动态变化.(1).example:<divid="box"><inputtype="button"@click="test='aaa'"value="aaa组件"><inputtype="......
  • 21 组件组成!!!!!
    很重要?组件:把一个大项目分成多个小项目,每个小项目打包成组件,把这些组件合起来就是完整的大项目可复用性<script>//第一步,导入组件importMyComponentfrom'./components/MyComponent.vue';//第二步,注入组件exportdefault{components:{MyCompo......