基于react+typescript的前端组件库violet-design(字节青训营项目)

news2025/2/27 8:53:45

文章目录

  • 前言
  • 一、项目介绍
  • 💌 介绍
    • 特性
    • 兼容性
  • 📦 安装
    • 使用 npm 安装
    • 使用 yarn 安装
    • 浏览器引入
  • 🔨 示例
      • 1. 引入样式
      • 2. 使用组件
    • 按需加载
    • TypeScript
  • ✨ 组件
  • 🔗 链接
  • 二、项目实现
    • 2.1 技术选型
    • 2.2 架构设计
      • 2.2.1 目标用户和场景
      • 2.2.2 组件库组织架构
      • 2.2.3 组件库架构类型
      • 2.2.4 组件库测试和部署方案
      • 2.2.5 组件库文档和示例
      • 2.2.5 组件库的版本管理
  • 三、项目截图

前言

大家好久不见呀!近一年没发文了。
本文简单介绍了,参加字节青训营和小伙伴们一起实现的项目:基于react+typescript技术栈实现的组件库violet-design 。希望大家支持鸭(给个start叭)。
在这里插入图片描述

一、项目介绍

  • violet-design 是基于react+typescript技术栈实现的组件库,包含7类共21个交互样式统一的组件,致力于提供功能丰富,使用简单,界面精美的UI解决方案。
  • 项目服务地址
    https://zhaoyuuu.github.io/violet-design/
  • Github 地址(走过路过给个star叭 OvO)
    https://github.com/zhaoyuuu/violet-design
  • Demo 演示视频
    https://www.bilibili.com/video/BV1fR4y1v7VU

💌 介绍

为了满足设计规范要求,本团队自行开发了「 Violet Design 」—— 一套基于 React 的 UI 组件库。 Violet Design 提供了丰富的组件和功能,在满足不同业务需求的同时,也极具美观和协调性。

特性

  • 🌈 自主设计的符合直觉的交互语言和视觉风格。
  • 📦 开箱即用的高质量 React 组件。
  • 🛡️ 使用 TypeScript 开发,提供完整的类型定义文件。
  • ☀️ 友好的 API ,自由灵活地使用空间。
  • 🎨 细致、漂亮的 UI。
  • 📁 清晰明了的演示站点,细致的文档。

兼容性

Edge Firefox Chrome Safari Opera
EdgeLast two versionsLast two versionsLast two versionsLast two versions

📦 安装

使用 npm 安装

推荐使用** npm **来安装,享受生态圈和工具带来的便利,可以在开发环境轻松调试,也可以在生态环境打包部署使用。

$ npm install violet-design

使用 yarn 安装

$ yarn add violet-design

浏览器引入

在浏览器中使用 scriptlink 标签直接引入文件,并使用全局变量 VioletDesign

注意:index.umd.js 依赖 reactreact-dom,请确保提前引入这些文件。

引入 css:

<link rel="stylesheet" href="https://unpkg.com/violet-design/dist/index.css">

引入 js:

<script src="https://unpkg.com/violet-design/dist/index.umd.js"></script>

🔨 示例

1. 引入样式

index.tsx(.jsx)中:

import 'violet-design/dist/index.css'

2. 使用组件

import React from 'react';
import { Button } from 'violet-design';

const App = () => (
  <>
    <Button btnType="primary" size="lg">PRESS ME</Button>
  </>
);

按需加载

violet-design 默认支持基于 ES modules 的 tree shaking。

TypeScript

violet-design使用 TypeScript 进行书写并提供了完整的定义文件。


✨ 组件

  • 🔘 通用型组件:Button 按钮、Icon 图标
  • 🗂️ 导航型组件:Menu 导航菜单
  • 🪄 数据录入型组件:AutoComplete 自动完成、Cascader 级联选择、CheckBox 多选框、DatePicker 日期选择器、RangeDatePicker 日期范围选择器、Form 表单、Input 输入框、InputNumber 数字输入框、RadioGroup 单选按钮组、Select 选择器、Switch 开关、Upload 上传
  • 📆 数据展示型组件:Calendar 日历、Tabs 标签页
  • 📈 反馈型组件:Progress 进度条
  • 📌 其他组件:Affix 图钉、Transition、Grid栅格

🔗 链接

  • 文档站
  • 组件库

二、项目实现

2.1 技术选型

React 18

  • 在 vue 和 react 中选择了 react
    • 组内对 react 更为熟悉
    • 目前在大厂中 react 的出现频率稍微高一些
  • React18比之前的版本在性能和体积上有较大提升,而且语法和 API 更加清晰,支持 hooks 和更少的函数式编程,而且基于 Hook API 的代码比以往的 HOC / renderProps 易于测试、读取和易用。考虑到以上原因,我们决定选择 React18 作为本项目的技术支撑。

TypeScript
TypeScript 已经被广泛应用,可以帮助开发者更快地构建稳定、可靠的应用,并具有智能化提示等便利功能。
本项目的复杂度和规模需要更高的代码质量,因此我们决定选择 TypeScript 作为本项目的开发语言。

Webpack

  • create-react-app 默认支持 webpack 作为构建工具,因此省去很多手动配置的工作,让我们得以更专注于实际开发
  • webpack 是经典的构建工具,社区成熟,遇到问题可以快速定位并解决

Rollup

  • Rollup 设计之初就是面向 ES Module 的,构建出结构扁平,性能出众的类库
  • 本项目是类库(纯js),适合使用 Rollup
  • 配置简单,通过简单的配置就可以打包出 esm umd 等格式js文件、css文件

Scss

  • Scss 支持变量、混合、嵌套、运算等高级特性,能够极大地简化 CSS 代码的编写和维护。
  • 组内对 Scss 相较于 Less 更为熟悉

React-testing-library

  • 组件库项目对组件的质量要求很高,React-testing-library 可以帮助开发人员更方便地测试 React 组件的功能和交互,从而确保代码的质量和可靠性
  • React-testing-library 是 create-react-app 内置的单元测试工具,无需手动搭建环境,社区成熟可靠

Eslint + Prettier

  • Eslint 是一个 JavaScript 代码检查工具,采用它来帮助团队的开发人员避免代码中的常见错误和不规范的用法
  • 团队代码风格的统一很重要,Prettier 是一个代码格式化工具,它可以一键自动帮助开发人员格式化代码

Storybook
为更好地展示组件供开发人员参考、使用,我们采用 Storybook 构建文档站。它提供了一个可视化的环境,方便开发人员编写、测试和维护 UI 组件。

  • 配置简单,可以在项目内快速搭建起一套业务组件文档项目
  • 无代码侵入性,独立于原有项目的一套打包、运行机制
  • 交互式测试组件
  • 组件文档书写方式多样化

Github-Actions

  • Github 内置的 cicd 工具,对于储存在github的项目来说,操作起来方便快捷,并且玩法多样且实用
  • 配置简单,入门教程详细
  • 运行自动化流程的演示画面直观

Husky(+Lint-staged)
在 pre-commit 时运行 npm run test:nowatch 和 npx lint-staged ,防止不合格的代码进入远程仓库,保证了仓库代码的可靠性

2.2 架构设计

2.2.1 目标用户和场景

  • 目标用户:前端开发人员、UI设计师
  • 场景:企业级Web应用、移动Web应用

2.2.2 组件库组织架构

violet-design组件库的范围清晰明确,在设计初期就定义了支持的技术栈、组件的类型和数量、所需的设计资源和文档等等,以确保组件库的实现和开发方向一致。

在本组件库的制作中,我们的violet-design组件库定义范围如下:

  • 技术栈:React, TypeScript,
  • 组件类型:
    • 通用组件:Button 按钮、Icon 图标
    • 导航组件:Menu 导航菜单
    • 数据录入:AutoComplete 自动完成、Cascader 级联选择、CheckBox 多选框、DataPicker 日期选择器、RangeDataPicker 日期范围选择器、Form 表单、Input 输入框、InputNumber 数字输入框、 RadioGroup 单选按钮组、 Select 选择器、 Switch 开关、Upload 上传
    • 数据展示:Calendar 日历、Tabs 标签页
    • 反馈:Progress 进度条
    • 布局:Grid 栅格
    • 其他:Affix 固钉
  • 设计资源:violet-design组件库主题图标、样式设计、violet主题配色方案
  • 文档:storybook文档站

2.2.3 组件库架构类型

面向组件(COP,Component-Oriented Programming)编程是一种编程思想,它来源于软件工程领域,是高级语言编程中的概念。面向组件技术建立在面向对象技术(OOP,Object-Oriented Programming)之上,它是面向对象技术的进一步发展。
组件和组件接口是面向组件编程的的两个重要概念。组件是一个明确定义了接口和相关功能的可组合的单元,它可以独立的发行并供第三方使用及再进一步组装。组件接口描述了组件对外提供的服务,组件和组件之间、组件和客户之间同时通过组件接口进行交互。组件发布后只能通过预定义的接口提供服务,因此组件的接口应具有稳定性、合理性,组件的接口必须标准化,这是组件是否成熟的标志之一。
在violet-design的组件库架构设计中,一直遵循着以上原则,自有组件的接口稳定合理,标准化,使用简单,可复用程度高。

2.2.4 组件库测试和部署方案

组件库的测试和部署是开发过程中不可或缺的环节,需要制定相应的测试和部署方案。
在violet-design设计中,利用React-testing-library对每个组件都编写了详细、可维护的单元测试,确保了组件的可靠性与稳定性;
在持续集成和持续交付方面,采用github-actions进行cicd,实现release新版本的时候自动更新远程npm,以及push新代码到master分之的时候自动部署、更新文档站。

2.2.5 组件库文档和示例

组件库的文档和示例是用户学习和使用组件库的重要资源,violet-design编写了清晰明确的storybook文档和示例。包括组件的使用方法,设计原则、样式规范等,提供了示例代码和演示,帮助用户更好地理解和使用组件库。

2.2.5 组件库的版本管理

  1. 语义化版本控制:使用语义化版本号(Semantic Versioning),即版本号由主版本号、次版本号和修订号组成,每次升级版本号都遵循一定规则。这样可以让开发者更容易地理解版本号的意义,从而更好地管理组件库的版本。当前violet-design正在持续迭代中。
  2. 版本号规划:在设计violet-design组件库时,事先规划好了版本号的使用方式。定义何时需要升级主版本号、何时需要升级次版本号、何时需要升级修订号等。这样可以确保版本号的使用方式一致,避免出现混乱的版本号管理。
  3. 发布流程:violet-design制定了合理的发布流程,包括代码审查、测试、文档更新、版本号升级、发布到中央仓库等流程。这样可以确保组件库的版本质量和稳定性,并且让开发者更容易地使用新版本。
  4. 自动化版本管理:使用自动化工具来管理组件库的版本,例如使用CI/CD工具自动化构建和发布组件库的新版本。可以降低发布过程中的人工错误,提高发布效率和可靠性。

三、项目截图

请添加图片描述
请添加图片描述
在这里插入图片描述
更多见文档站

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

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

相关文章

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机&#xff0c;应用程序依赖项作为主机的一部分安装。 例如&#xff0c;考虑一个 Python 应用程序&#xff0c;它需要访问实现 TLS 协议的公共共享…

第 16 章_多版本并发控制

第 16 章_多版本并发控制 1. 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作…

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,…

Office 365 备份与恢复

Microsoft Office 365中的不同服务几乎可以随时访问&#xff0c;这要归功于Microsoft的99.9%正常运行时间记录。但是&#xff0c;Office 365步履蹒跚的一个方面是提供了一种从意外数据丢失中恢复的方法。Microsoft 提供的数据保留功能并非适用于所有数据丢失情况的可行解决方案…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Leetcode力扣秋招刷题路-0082

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#…

这6个视频剪辑素材库,你一定要知道~

推荐5个免费商用视频素材网站&#xff0c;建议收藏哦&#xff01; 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材量很大&#xff0c;有设计、图片、音频、视频等超多素材&#xff0c;大部分都能免费下载。视频素材都很高清&#xff0c;有自然、人物、科技、农业…

前端页面开发模块组织结构

模块组织 任何超过 1000 行的 CSS 代码,你都曾经历过这样的体验: 这个 class 到底是什么意思呢?这个 class 在哪里被使用呢?如果我创建一个 xxoo class,会造成冲突吗?Reasonable System for CSS Stylesheet Structure 的目标就是解决以上问题,它不是一个框架,而是通过…

Freemarker快速入门

freemarker提供很多指令用于解析各种类型的数据模型参考地址&#xff1a;http://freemarker.foofun.cn/ref_directives.html一.测试搭建Freemarker的运行环境并进行测试.1.添加Freemarker与SpringBoot的整合包XML <!-- Spring Boot 对结果视图 Freemarker 集成 --> <d…

互斥锁原理

如果有交互的公共数据区域&#xff0c;我们需要让一个进程先执行&#xff0c;一个进程后执行&#xff0c;互斥锁就是用锁的方式让他们的竞争关系变得有序。 临界区问题 临界区是在程序之间有公共数据交互时产生的区域&#xff0c;没有两个进程可以在它们各自的临界区同时执行…

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…

C++11智能指针std::shared_ptr介绍及使用

介绍 shared_ptr是一种智能指针(smart pointer)&#xff0c;作用有如同指针&#xff0c;但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设 maxn\…

【C++】2.类和对象(上)

1.面向过程和面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 2.类的引入…

【发版或上线项目保姆级心得】

第一步&#xff1a;先在正式环境创建数据库/新增表格或者字段 在数据库表中增加字段/表格&#xff0c;不会报错。 但是切记不要过早数据库字段/表格或者删除字段/表格 第二步&#xff1a;修改配置文件 先将正式环境需要的配置给写好&#xff0c;包括但不仅限于数据库配置、…

秋招面试问题整理之机器学习篇

文章目录随机森林在决策树的哪些方面做出了改进随机森林里每棵树的权重不一定会变成什么模型方差和偏差&#xff0c;正则化解决的是方差大还是偏差大的问题正则化的方法总结了解VC维吗svd了解吗随机森林在决策树的哪些方面做出了改进 回答思路&#xff1a; 随机森林和决策树有…

同步syslog日志到服务端

目录结构前言Windows下安装syslog服务端&#xff08;Syslog Watcher Manager&#xff09;Linux下syslog服务端搭建java同步日志代码块日志同步测试前言 系统同步日志到syslog服务器&#xff0c;此文章记录以下内容&#xff1a; Windows下syslog服务端&#xff08;Syslog Watc…

主食吃什么最健康?

又到了订饭的时候了&#xff0c;今天打算吃什么呢&#xff1f;面包&#xff1f;炒饭&#xff1f;面条&#xff1f;还是粥&#xff1f;上面说到的这些都是主食。大家都知道主食能带来很强的饱腹感&#xff0c;而且还是身体最重要、最经济的营养来源。但五谷杂粮&#xff0c;营养…

【项目】好用快搜文档搜索工具

文章目录一、项目分析1、项目调研2、项目需求3、开发环境4、项目知识框架5、项目实现基本理论二、项目设计整体框架设计代码框架设计三、项目实现1、系统工具模块目录遍历2、数据库管理模块2.1、封装数据库管理类(SqliteManager)2.2、封装数据管理类(DataManager)3、扫描模块4、…

紫外线生物素标记Biotin-PEG2-alkyne,UV Cleavable Biotin-PEG2-alkyne

UV Cleavable Biotin-PEG2-alkyne含有紫外线可切割碎片(containsa UV cleavable Fragemnt)&#xff0c;试剂通过点击化学与含叠氮化物的分子反应。点击化学生物素标记试剂包含各种点击化学官能团修饰的生物素&#xff0c;适用于各种生物素标记实验。1.UV Cleavable Biotin-PEG2…