社区组件库
暗黑模式
点击按钮,切换主题
document.body.setAttribute('arco-theme', 'xxx');
局部应用暗色模式
核心思路:本质是控制暗色颜色变量的挂载位置,提高我们所需要的颜色变量的优先级
国际化-语言国际化
不是通过if...else来判断当前是何种语言 而是从全局配置上读取Locale文件
实现动态语言切换 直接通过ConfigProvider组件传入不同语言文件去修改locale
当需要的语言还未支持时,我们可以模仿官方的语言文件格式,来自定义一个语言文件。
自定义语言包文件 custom-locale.ts
通过configProvider组件消费
国际化-RTL视图
LRT视图
RTL视图
如何开启RTL视图?
RTL视图实现浅析
- 元素方向RTL CSS属性,direction:rtl;(用来设置文本和其他元素的默认方向是从右到左)
- 布局RTL margin-left => margin-right position: left => position: right
- 交互行为 Slider组件,向左拖动数值变小 => 向右拖动数值变小
ConfigProvider - 全局配置组件默认属性
定义组件配置
通过ConfigProvider的componentConfig属性,传入定义好的配置文件,组件配置将会对ConfigProvider包裹的所有组件生效
- 配置未启用
- 配置已启用
自定义组件
业务组件库搭建
打地基 - 盖房子 - 装修
架构设计 - 技术方案 - 对外文档
架构设计
单包架构
一个代码仓库里所有组件打包成一个整体,发布出去一个npm包
package.json在根目录
优点
- 公共代码易复用
- 展示更聚合,易于维护
- 引入一个包即可使用所有组件
缺点
- 修改一个组件需要更新一整个库
- 需要考虑按需加载
多包架构
一个代码仓库包含多个组件代码,会发布出去多个npm包
每个组件都有对应的package.json
优点
- 单独发包,升级灵活
- 在同一仓库下,便于代码管理
- 使用者无需考虑按需引入
缺点
- 组件之间相互依赖,需通过npm引入
- 组件使用时,需要安装每一个用到的npm包
技术方案
开发环境
- 打包速度
- 实时预览,如storybook
样式方案
- 样式方案:Less / Sass,CSS in JS,CSS等,如果有较强依赖的第三方库的话,可以与第三方库保持一致
- 组件库换肤,样式定制等能力
产物构建
- 构建工具:webpack,rollup,vite,gulp等
- 产品格式:cjs,umd,es
如果需要支持node环境的话,就需要包cjs格式 如果需要CDN引用的话,就需要包含umd格式
质量保障
- 测试工具:jest,karma,mocha,enzyme,react-testing-libary等
- 测试类型:单元测试,快照测试,截屏测试,e2e测试等
组件开发
对外文档
文档部署
- Demo展示:Storybook,umijs等
- 静态内容展示:markdown
组件API生成
- 手写
- 自动提取:ts-document等
版本日志
- 手写
- 自动提取:从PR提交记录中自动提取@arco-design-changelog
组件开发规范
- 高内聚、低耦合
职责清晰,高可维护性
对外提供简单稳定的接口,对内关注内部逻辑的实现。
组件和组件之间能简单的配合实现定制的功能。
比如:Popver直接嵌套Input即可实现:在输入框聚焦时显示气泡提示内容。
- 通用性、易扩展
基础组件适用广泛的业务场景
比如金融,电商,政务等业务平台业务组件适用于针对性平台
具备显著的业务属性,一般基于基础组件开发。比如︰通过关键字调接口搜索Lark 群聊
项目组织
语义化命名
组件的命名应当具有语义,并且避免与基础组件冲突。同一团队/仓库下的业务组件,也可采用相同的命名前缀。
包名和组件名最后一致
NPM包名应当尽量与组件名保持一致,包含明确的使用场景信息。
单独维护类型文件
推荐将需要对外导出的TS类型维护在单独的interface.ts 中,并将其在index.ts 中导出。
保存代码信息,便于维护
组件设计
组件属性定义(接口定义)
在为组件定义接口类型时,应继承原生DOM(或基础组件)属性,避免属性遗漏或重复声明。
类名前缀统一
组件使用特殊且统一的类名前缀,尽量降低与用户类名冲突的可能性。
避免行内样式
确保外部可通过类名进行样式覆盖。
避免在JS中耦合CSS
应尽量保证逻辑与样式的分离,确保用户可以分别引入JS和CSS文件,避免由于构建环境的不同导致的用户编译失败的问题。
注意样式的按需加载
在基于基础组件库如Arco进行业务组件的逻辑封装时,应注意按需引入所依赖的Arco基础组件的样式文件
实例实践guide-tip
API定义
- 显示弹出层:Arco Popover组件
- 步骤切换:状态变量current记录当前处于哪一步骤
- 弹出层始终指向对应的 Button:实时获取目标节点的位置,更新弹出层指向。