当前位置: 首页 > 网络应用技术

Masa Blazor自定义组件包

时间:2023-03-07 20:11:53 网络应用技术

  在实际项目中,总是可以遇到“组件”。它不是基本组件,但会经常重用它。开发MASA auth时,还包装了几个组件。有一个组件(GroupBox)简单地定义了CSS样式和接口包装,以及具有组件的某些内部逻辑的组件(ColorGroup)。本文将演示如何封装一个下面显示的ColorGroup组件,将MitemGroup转换为ColorGroup,然后单击“选择预设的颜色值”。

  Masa Blazor提供丰富的组件(仍在增加),并且长度仅限于我经常使用的某些组件

  BlazorComponent是一个基础组件框架,仅提供无需样式定义的功能逻辑。Masa Blazor是实现材料设计样式标准的悬崖基础知识。如下图所示,您可以根据蚂蚁设计风格的标准实现一组Ant Design Blazor(尽管您已经拥有它,如果您想这样做,可以完全实施)。

  首先确保已安装了MASA模板(避免手动参考MASA爆炸)。

  创建一个简单的MASA Blazor Server应用程序:

  Glazor组件包装非常简单。您不需要像Vue一样注册。创建了一个新的XXX.RAZOR组件来实现XXX组件的封装。稍微复杂的是,需要组件的内部逻辑,并且对用户的定义定义(不同的使用方案)(不同的使用方案)接口(参数),即增加xxx.razor.cs和xxx.razor.css根据需求文件。

  找到所需的组件来组装对熟悉各种组件函数的前提的预期影响。在这里,我使用mitemgroup,mcard和mbutton来实现colorGroup的效果。MiteMgroup.MiteMgroup确实具有颜色分组,并提供了每个激活功能。MASK是一个掩码。在未选择颜色之前层以达到模糊效应。

  您还可以选择具有对比度颜色的圆形框架徽标的状态。相关CSS参考:https://www.dailytoolz.com/css-border-radius-tenerator/

  创建一个新的ColorGroup.Razor文件,代码如下:

  修改index.blazor文件以添加colorGroup以使用代码,masa.blazor.custom.shaased.presets是一种自定义组件路径,即,名称空间:

  运行代码,请参阅三种不同的颜色类型:

  Masa Blazor是Vueetify的大发。除M-Color-Group外,所有类都是Vuetify提供的类样式。

  您可以通过第一部分看到包装组件的组件面(接口),但是此面是“死”。根据不同的使用情况,它不能显示出不同的效果。对于ColorGroupDefine所显示的颜色值。在jlazor中,参数通过[参数]特征声明,叙事代码中的死亡值通过参数通过参数。MitemGroup的classGroup属性。在同一时间,添加组件的lial(组件逻辑),然后单击不同的颜色按钮以更新该值。

  创建一个新的colorgroup.razor.cs文件,添加以下代码:

  可以看出上面的代码,值参数具有与之相对应的Valuechangechangecemechangechangegangechangecephangecephangecephangecephangecephang。目的是能够在组件之外接收值的值。通过调用ValueChanged.invokeasync通知,该组件的外部价值已更新。

  应该注意的是,应尽可能减少参数的定义。太多的参数将增加组件的开销。reduce参数传输并可以自定义参数类(本文的示例是单独定义多个参数)。

  同时,在colorgroup.razor文件中更新代码,循环颜色属性显示子元素,并添加mbutton的点击以更新值:

  目前,ColorGroup的代码已更改为以下代码。您可以灵活地指定颜色组数据以及ColorGroup的类和样式:

  在第一部分的末尾,除m彩色组外的所有类都是Vuetify提供的类样式,M-color group?new colorgroup.razor.css file,colorgroup.razor.css文件中的CSS将仅限于colorgroup.razor component.componty.ine的其他组件。增加colorgroup.razor.css,但只想感觉包装组件的现有样式足以阅读,并且该类仅用于外部用途,以促进CSS样式的重写,并且不能定义任何定义。

  有关更多隔离风格,请参阅官方文档。

  到目前为止,可以说自定义的colorGroup组件已经足够了,但是还不够。由于表格是单个的,如果要在颜色选择按钮之后添加文本或图片?这引入了另一个概念:插槽。插槽(插槽)(插槽)是VUE中的名称,Vuetify组件提供了许多插槽,例如文本输入框中的前后凹槽以及输入框外的前后凹槽(默认)。Masa Blazor还意识到了插槽功能,这使我们更容易定义和扩展组件。

  Blazor更愿意为C#开发人员调用模板或内容,并通过RenderFragment实现插槽的效果。如果您的组件需要定义子元素,以捕获子续签的内容,则需要定义一个称为育儿类型的组件参数。

  将渲染属性属性添加到colorGroup.razor.cs文件中以定义每一端的附加插槽,并定义字符串参数以接收当前的颜色值。

  渲染范围定义一个参数组件,默认情况下使用参数值。更多内容是指官方文档

  colorGroup.Razor文件定义插槽位置

  最终效果如下:

  在确保功能和美丽的同时,组件还必须确保性能。以下仅列出了一些更常规的优化方法。

  合理地重写应剥夺方法以避免重新出现高成本。构成官方网站代码自己体验它,也就是说,当满足某些条件时,它将得到重新施加:

  减少不必要的状态法呼叫。默认情况下,组件从componentbase继承。调用组件的事件处理程序后,自动调用了stateHaschanged。对于某些事件处理程序可能无法修改组件状态的状态,该应用程序可以使用iHandleeventInterface来控制大火事件的行为。示例代码,请参阅官方文档。

  首先,我们必须了解组件的生命周期,尤其是onitializatization(在组件接收到setParameterSasync中的初始参数之后),onparametersset(接收呼叫更改时)和onfterrender(组件完成后)。上述方法执行两次或更高(render-mode =“ serverperendered”)。组件初始化的逻辑在每个生命周期方法中合理地分布。最常见的是AnfterRender方法。当Firstrender为True时,JS或加载数据:

  派生的生命周期:

  重复重复呈现的逻辑作为呈现范围,可以将其重复使用以无需每个组件的数量而重复使用逻辑。缺点是重复使用呈现效果段缺乏组件边界,并且不能分别刷新。

  创建lambda表达式过多地托付了大火,可能会导致性能差,例如为每个按钮组的委员会分配佣金。表达式可以委托给行动以减少开销的分配。

  组件实现IDisposable或iAsyncdisposable接口,从UI删除时将发布非固定资源和事件取消操作。

  组件不需要同时实现IDISPOSABLE和IASYNCDISPOSPOS。如果两者都已实现,则该框架只是异步负载。

  更多内容参考:https://docs.microsoft.com/zh-cn/aspnet/core/blazor/performance?view = aspnetcore-6.0#define- RenderFragments-code

  这里只有一个非常简单的颜色组示例是一个非常简单的示例。当然,您还可以使此组件“复杂”。实际上,该组件的包装不像想象的那样复杂。除了标准组件)。

  示例项目,更多内容是指MASA Blazor预设组件的实现。

  masa.buildingblocks:https://github.com/masastack/masa.buildingblocks

  masa.contrib:https://github.com/masastack/masa.contrib

  masa.utils:https://github.com/masastack/masa.utils

  masa.eshop:https://github.com/masalabs/masa.eshop

  masa.blazor:https://github.com/blazorcomponent/masa.blazor

  如果您对我们的MASA框架感兴趣,无论是代码贡献,使用和提及问题,请与我们联系