如何用 Blazor 实现 Ant Design 组件库?

本文主要分享我创建 Ant Design of Blazor 项目的心路历程,已经文末有一个 Blazor 线上分享预告。

Blazor WebAssembly 来了!

Blazor 这个新推出的前端 Web 框架,想必是去年 .NET Core 3.0 发布时才进入 .NET 开发者的视线的。但其实,那时发布的是服务端托管版,而真正具有跨时代意义的,是即将在今年5月发布的 WebAssembly 托管版。

我早在两年前,2017年底,就已经在 Steve Sanderson 的一篇博客中看到这个能完全运行在浏览器的前端框架。那时我还是个只会 vue 和一点 Angular 的年轻人,看到只用 C# 就能写一样的单页应用,哪能经得住这种激动。那时就很期待能快点正式发布。后来真的被纳入 AspNetCore 项目的一部分,不断发展完善。没想到最后会是服务端托管版本先发布,而一直发展了接近3年的 WebAssembly 版本,也终于将在今年5月正式发布!

发展至今,Blazor 已经从通过 SignalR 实现双向绑定的服务端托管模式、到通过 WebAssembly 在浏览器上运行 .NET 运行时,再到现在还实现了 PWA、移动端原生控件绑定等技术,Blazor 在未正式发布时就已经有如此多的功能,可见 ASP.NET 团队和整个社区在 Blazor 上付出了有多大的精力、诚意与期待。ASP.NET 团队还有一系列的开发计划,今年底预计还会发布基于原生UI渲染系统的预览版本。

也就是说,Blazor 目前还是前端 Web 框架,但是等到了明年,就会成为一个跨设备平台的客户端框架了!

Blazor 现状

那么,现在我们就能马上用起来了吗?

能,也不能,这取决于你想怎么用。如果像官方给出的开发模板那样,使用 Bootstrap 作为样式库,而自己实现所有交互效果的话,完全可以用起来了。但是,如果希望有更具交互性更美观的组件库,能拿来就用,快速实现 UI 需求的话,能选择的组件库还不多,在 Awesome Blazor 列表中,完成度较高的开源的组件库,最好的就有 Material Design 的实现 MatBlazor,其他的基于Bootstrap 的,大多是靠JS实现交互,Blaozr只是渲染最基本的一个Html标签。再者还有收费的 Telerik UI、Radzen.Blazor 等等……国内还有好几个原来做 WPF、MVC组件的厂商也开始了Blazor组件的贩卖……

这种形势,就等于是手上只有一个 angluar-cli,是能创建空白的组件,但离搭建出高水准的UI组件就还差十万八千里了。那么,该让谁来填补组件库的空白呢?我们参考一下已有的前端框架吧。

为什么想做 Blazor 组件库

目前我们用在项目中的前端框架组件库,能数出名的 Ant Design、ElementUI、iView、Vuetify 莫不是依靠开源社区的力量打造出来的。所以,Blazor 的组件库也需要靠开源社区贡献!

那我们怎么做 Blazor 的组件库呢?

现代的前端组件库大体上可以分两个部分,一是设计语言与理论,二是具体框架实现。设计语言与理论更多地是 UI/UX 方面的设计。对我来说,最喜欢的设计以此是微软的 Fluent Design、谷歌的 Material Design、再到蚂蚁的 Ant Design。而具体框架实现就是由 React、Angular、Vue 等框架的实现了。

经过几年来的实践,还有对开源社区的观察,分别用过 Bootstrap、iView、Material、PrimeNG 等组件库之后,最终还是觉得 Ant Design 在 UI 设计、组件功能和实用性、项目工程、社区活跃度等方面总体上都做得很好。作为一个开源项目, 2019 年 7 月,Ant Design的 Github star 数超过 Material UI,成为全球 star 数最高的 React 组件库项目。

还翻到篇文章,蚂蚁UED接受采访时说:

选择 Design 这个域名,是期待我们能将设计价值观、原则和模式逐步传承下去,因为前端框架、设计风格都会过时,antd (Ant Design of React:用 React 前端框架实现的 Ant Design)一定会被淘汰。但如果我们有 Ant Design ,下个潮流来的时候,我们能快速搭建新的 Ant Design of XXX。非常感动的是,除了 antd,我们已经有 10+ 不同前端框架实现的 Ant Design。我们的 Design 梦得到了真正的延续。

—— 蚂蚁UED

于是一语成谶,WebAssembly 这一潮流来了,Ant Design of Blazor 应运而生。

我如何做 Ant Design of Blazor

与 Ant Design 官方一致

Ant Design of Blazor (以下简称 AntBlazor)从一开始我就定位在与官方 React 实现的代码仓库同规模的项目,并参考它的其他实现,如 NG-ZORRO、ant-design-vue 是如何做另一个框架的实现的。

  • 参考 ant-design-vue 的命名,我把 Blazor 仓库名改为 ant-design-blazor。

  • 参考 NG-ZORRO 的 logo 改编,我把 Blazor 官网的 logo 抠下来,也把 Ant Design 的 logo 挖空并旋转 -45°,把 Blazor logo 填上并修改颜色。

  • 参考 NG-ZORRO 的样式同步机器人,我也自己写了样式同步的 Github Action,定时检查 ant-design 是否有新版本发布,当有新版本时自动提交PR。

  • 参考 ant-design 写了 README 和 demo 文档。

  • 参考 NG-ZORRO,使用 Angular 的 commit lints。

  • 为了项目工程质量,使用 TS 编写互操作脚本,编译脚本都是开源的,对外部贡献者尽量友好,而不是像已有的几个 Blazor 组件库那样只给出混淆后的 js、css。

  • 还有一些在文档构建时衍生出的副产品,如约定式路由、组件渲染服务等。

在为了与官方高度一致上的努力,还会继续。希望有一天能在丰富 Blazor 生态的同时,还能成为被 Ant Design 生态认可的框架实现,能成为他们 Design 梦的一个延续。

发起 Blazor 中文社区

对与社区来说,Blazor 还是新鲜事物,就算发布半年了,真正有在项目中运用的还是极少数。因此我建了个微信群,希望对 Blazor 真有兴趣的朋友加入,为了发广告的就免了。想加入,可找张队帮忙邀请,他加的人多????。

当然,社区运营不是拉个群就完成的,还需要定期地举办线上线下的分享,还有邀请不同领域的大佬一起交流。目前来自前端圈的于航老师和敖天羽大大也被邀请进来了。

制定开发路线

在今年年中,我们打算能发布第一个版本 0.1.0,其中完成以下开发项:

  • 基本实现 Ant Design 组件

  • 组件的独立发布脚本

  • 完整文档的构建脚本

如果进展顺利,在年末 .NET 5 发布时,我们能发布生产可用的 1.0 版。

寻找贡献者

要实现这些目标,光靠我一个人是不行的,我需要在社区中寻找到其他开发者一起贡献这个项目。在社区中,目前已经为 AntBlazor 项目邀请到几个开发者参与了代码贡献,并希望有更多对 Ant Design 和 Blazor 有兴趣的开源爱好者加入。特别是希望能有企业用户在有需求的情况下慷慨贡献。

我们欢迎感兴趣的前端开发者加入,Blazor 是一个完完全全的前端框架,我们在做的也是前端组件库,是十分需要与感激有前端开发者加入到我们,推动 Blazor 在前端的发展。

我能做的是完善开发流程和引入一些好用的工具,尽量让社区贡献更方便。

开展技术分享

考虑到很多朋友还不太了解 Blazor,因此我会在社区中不定期举办分享和培训。会找 Microsoft Reactor 的老师帮忙安排场地,也会在线上举办直播会议,给大家分享一下 Blazor 与参与开源项目的知识,让他们能更好地入手给 AntBlazor 提交代码。

在本周日(即3月21日)下午,我将在钉钉发起直播会议,讲解 Blazor 的官方文档以及 ant-design-blazor 的项目结构以及示范写 Ant Design 组件。钉钉群入口就是ant-design-blazor 项目README最下面的二维码,大家扫码之前记得点个 Star!

项目地址: https://github.com/ElderJames/ant-design-blazor

小声地拉一下赞助:为了加载速度,我把文档站点部署在了Gitee上。但是Gitee需要收费的专业版才能自动更新和自定义域名,年费99元…如果能收到捐赠,我会在项目README中放上用户头像,以及公示使用情况。点下面的赞赏就好,记得备注 Github Account。


参考:

  • 专访蚂蚁金服体验技术UED:Ant Design希望成为世界级设计体系

  • https://zhuanlan.zhihu.com/p/110863773

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310992.shtml

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

相关文章

.NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记...

28 | 工作单元模式(UnitOfWork):管理好你的事务工作单元模式有如下几个特性:1、使用同一上下文2、跟踪实体的状态3、保障事务一致性我们对实体的操作,最终的状态都是应该如实保存到我们的存储中,进行持久化…

《C++ Primer》7.3.2节练习

练习7.27: #include <iostream> #include <cstring> using namespace std;class Screen {private:unsigned height 0, width 0;unsigned cursor 0;string contents;public:Screen() default;Screen(unsigned ht, unsigned wd): height(ht), width(wd), conten…

【实战 Ids4】║ 控制台密码模式搭配Ocelot网关

&#xff08;此岁只能云赏樱了&#xff09;书接上文&#xff0c;这些天一直在研究IdentityServer4&#xff08;下文简称Ids4&#xff09;框架&#xff0c;发现有很多有意思&#xff0c;或者说比我想象中的知识点&#xff0c;可扩展的多&#xff0c;所以比较开心能钻研进去&…

《C++ Primer》7.3.3节练习

练习7.31: 满足题意的程序如下所示&#xff1a; class X;//声明类型X class Y//定义类型Y {X* x; }; class X//定义类型X {Y y; };类X的声明称为前向声明&#xff0c;它向程序中引入了名字X并且指明X是一种类类型。对于类型X来说&#xff0c;此时我们已知它是一个类类型&#…

.NET Core 如何生成信用卡卡号

点击上方蓝字关注“汪宇杰博客”导语上个月我写了《.NET Core 如何验证信用卡卡号》&#xff0c;不少朋友表示挺有兴趣。在金融科技行业的实际工作中&#xff0c;通常还需要生成信用卡卡号用来测试&#xff0c;今天我就来教大家如何生成信用卡卡号。上回的改进上篇文章写完后&a…

python怎么爬虎牙_使用python爬虫框架scrapy抓取虎牙主播数据

前言本文利用python的scrapy框架对虎牙web端的主播、主播订阅数、主播当前观看人数等基本数据进行抓取&#xff0c;并将抓取到的数据以csv格数输出&#xff0c;以及存储到mongodb中思路观察虎牙网站后确认所有频道url都在www.huya.com/g中的&#xff0c;而主播房间数据则是ajax…

《C++ Primer》7.3.4节练习

练习7.32: 要想让clear函数作为Screen的友元&#xff0c;只需要在Screen类中做出友元声明即可。本题的真正关键之处是程序的组织结构&#xff0c;我们必须首先定义Window_mgr类&#xff0c;其中声明clear函数&#xff0c;但是不能定义它&#xff1b;接下来定义Screen类&#xf…

.NET Core开发实战(第29课:定义仓储:使用EF Core实现仓储层)--学习笔记

29 | 定义仓储&#xff1a;使用EF Core实现仓储层首先定义仓储层的接口&#xff0c;以及仓储层实现的基类&#xff0c;抽象类仓储层的接口namespace GeekTime.Infrastructure.Core {/// <summary>/// 包含普通实体的仓储/// 约束 TEntity 必须是继承 Entity 的基类&#…

ueditor单图上传iframe跨域_UEditor单图上传(simpleupload)跨域问题解决方案

代码实现首先我们需要在ueditor.all.js文件中找到原本的单图上传部分的代码搜索关键字 simpleupload&#xff0c;如下图所示&#xff1a;然后找到上传图片的代码片段&#xff0c;如下图所示&#xff1a;然后把 domUtils.on的 input 绑定的事件注释掉或删除掉替换成以下代码:inp…

StringBuilder内存碎片对性能的影响

TL;DR:StringBuilder内部是由多段 char[]组成的半自动链表&#xff0c;因此频繁从中间修改 StringBuilder&#xff0c;会将原本连续的内存分隔为多段&#xff0c;从而影响读取/遍历性能。连续内存与不连续内存的性能差&#xff0c;可能高达 1600倍。背景用 StringBuilder的用户…

java 双击_利用java开发一个双击执行的小程序

之前我们利用java写了很多东西&#xff0c;但是好像都没有什么实际意义。因为有意义桌面小程序怎么都得有个界面&#xff0c;可是界面又不太好搞。或者 了解到这一层的人就少之又少了。呀&#xff0c;是不是还得开辟一些版面来介绍awt和 swing。。。算了 先把这个 双击执行的小…

开发人员如何学习 Kubernetes

虽然“容器编排平台”还没有被整个行业大范围采用&#xff0c;但在这一领域 Kubernetes 已经战胜其他选手&#xff0c;成为了事实标准。近两年的 Web 开发技术社区&#xff0c;随便打开一两个群&#xff0c;你都能看到人们在谈 Kubernetes。很多开发人员&#xff0c;包括曾经的…

安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)

Java Decompiler是Java语言的反编译工具&#xff0c;具体介绍见博客Java Decompiler(Java反编译工具)1、下载插件Eclipe的Java Decompiler插件名为JD-Eclipse&#xff0c;2、安装插件Ecipse安装JD-Eclipse(即Java Decompiler)插件步骤如下&#xff1a;打开Help --> Install …

给 ABP vNext 应用安装私信模块

在上一节五分钟完成 ABP vNext 通讯录 App 开发 中&#xff0c;我们用完成了通讯录 App 的基础开发。这本章节&#xff0c;我们会给通讯录 App 安装私信模块&#xff0c;使不同用户能够通过相互发送消息&#xff0c;并接收新私信的通知。在章节的最后&#xff0c;笔者将演示模块…

《C++ Primer》7.5.2节练习

练习7.41: #include <iostream> #include <string> using namespace std;class Sales_data {friend std::istream &read(std::istream &is, Sales_data &item);friend std::ostream &print(std::ostream &os, const Sales_data &item);pu…

零基础玩视频号?创作运营变现,你要的干货都在这了!

点击蓝字“大白技术控”关注我哟加个“星标★”&#xff0c;每日良时&#xff0c;好文必达&#xff01;不少小伙伴应该已经听说过视频号这个新功能了&#xff0c;视频号是微信内测的短视频功能&#xff0c;本人已经在视频号里刷了2个月了。3月中旬正式开通了视频号 「大白技术控…

Asp.Net Core 中IdentityServer4 实战之 Claim详解

一、前言由于疫情原因&#xff0c;让我开始了以博客的方式来学习和分享技术&#xff08;持续分享的过程也是自己学习成长的过程&#xff09;&#xff0c;同时也让更多的初学者学习到相关知识&#xff0c;如果我的文章中有分析不到位的地方&#xff0c;还请大家多多指教&#xf…

程序员还有35岁的坎吗?

昨天晚上和多年未见的前同事聊天&#xff0c;提到了程序员的年龄歧视问题&#xff1a;自己年龄也 30 出头了&#xff0c;在思考 IT 届流传的 35 岁是一个坎的问题&#xff1b;开始注重提升管理能力&#xff0c;担心35岁之后&#xff0c;一线写代码的岗位不能胜任&#xff1b;公…

java 左移 返回值_java左移右移运算符详解

在阅读源码的过程中&#xff0c;经常会看到这些符号<< &#xff0c;>>&#xff0c;>>>&#xff0c;这些符号在Java中叫移位运算符&#xff0c;在写代码的过程中&#xff0c;虽然我们基本上不会去写这些符号&#xff0c;但需要明白这些符号的运算原理&…

人与人的差距在于认知

作者介绍findyi&#xff0c;腾讯、360码农&#xff0c;前哒哒少儿英语技术VP&#xff0c;现任土豆教育CTO。工作和生活中不光要埋头干活&#xff0c;还要抬头看天。思考总结方法论是提升认知的必备途径&#xff0c;是将碎片化知识总结为动态的智慧的过程。认知有多重要&#xf…