-
-
Notifications
You must be signed in to change notification settings - Fork 225
组件开发须知 & 规范
Jerome edited this page Jan 3, 2024
·
14 revisions
项目脚手架自带新建组件模板功能,全局安装 @zarm-design/cli
,进行以下四步即可快速创建一个组件模板。
第一步:进入 zarm 子工程,执行脚本新增一个 MyComponent
组件的模板
cd packages/zarm
zarm add MyComponent
第二步:在 packages/zarm/src/index.ts
中将组件导出
export { default as MyComponent } from './my-component';
export type { MyComponentCssVars, MyComponentProps } from './my-component';
第三步:在 packages/zarm/src/style/components/scss
中增加组件样式文件
@import "../my-component/style";
第四步:在 packages/site/site.config.js
components
对象中增加组件示例配置
{
key: 'my-component',
name: '组件名',
module: () => import('zarm/my-component/demo.md'),
source: 'zarm/my-component/demo.md',
style: false,
}
- ts 类型命名
特定属性需要按照大驼峰命名规范,并且带上组件名的前缀,如按钮组件的
size
大小:
export type ButtonSize = 'lg' | 'md' | 'sm' | 'xs';
- 渲染节点命名 相关节点渲染的 render 函数命名,如果是 renderXXX 代表的是一个函数,如果是 xxxRender 代表的是一个表达式。
const iconRender = icon && <div className={`${prefixCls}__icon`}>{icon}</div>;
const renderIcon = (icon) => icon && <div className={`${prefixCls}__icon`}>{icon}</div>;
return (
<>
{iconRender}
{renderIcon(icon)}
</>
);
-
使用 bem 规范编写 scss 文件,项目已经写好了相关 mixins,详细规范可参考 https://github.com/ZhongAnTech/zarm/issues/234
-
组件的状态用
@include m(xxx)
来定义,且尽量提升到组件的顶层节点。
<!-- good -->
<button className="za-button za-button--disabled za-button--lg">
<span className="za-button__content">按钮文字</span>
</button>
<!-- bad -->
<button className="za-button">
<span className="za-button__content za-button--disabled za-button--lg">按钮文字</span>
</button>
- 样式文件中不能出现 .za-/.zw- 等写死的样式前缀。
- 全局的 css variables 编译时会统一引入,组件的
scss
中无需额外引入 - 希望后期能外部设置的 css variables 需要定义在 packages/zarm/src/style/themes/default.scss 文件中,且尽可能保证在变量修改的同时,显示的样式能够按比例适配
- 复用其他组件以后,需要在 packages/zarm/src/当前组件/style/index.ts 文件中引入组件的样式文件。比如使用了 icon:
import '../../style';
import '../../icon/style';
import './index.scss';
规则:--前缀-组件名-(元素)-(状态)*n-属性
范例如下:
--前缀-组件名-属性
--za-button-height // 按钮组件的高度
--前缀-组件名-(元素)-属性
--za-button-icon-color // 按钮组件图标节点的颜色
--前缀-组件名-(状态)*1-属性
--za-button-primary-background // 主按钮的背景色
--前缀-组件名-(状态)*n-属性
--za-button-primary-active-background // 主按钮激活状态的背景色
--前缀-组件名-(元素)-(状态)*n-属性
--za-button-icon-primary-color // 按钮组件图标节点在主按钮状态下的颜色
--za-button-icon-primary-active-color // 按钮组件图标节点在主按钮激活状态下的颜色
- 组件 props 需要导出相关 ts 类型,如
export type { RadioProps, RadioGroupProps } from './radio';
- ReactNode 类型是联合类型,一般情况下不需要和其他类型同时使用,使用时请详细了解
- 表格列按顺序:属性、类型、默认值、说明
- “类型”按照 TS 的定义来写
- 可选参数填入“说明”中,并包含用法解释
- 按维度/场景列举展示
- 尽可能覆盖到所有 props 的展示
- 代码覆盖率尽可能高,至少 80%。
- 提交 PR 前执行
yarn test -u
命令,确保单元测试快照更新及无误,增加-o
参数可以只运行已修改文件的单元测试。
- 提交 PR 后如 Github Actions 执行的 CI 报错,以及 netlify 的站点部署 CD 报错,请自行排查错误信息,修改并重新提交。
- 多参考已完成的组件,有利于代码风格的统一
- 对设计稿、定义的 API 等问题有疑问,请及时沟通,应避免先做再提
- 请充分自测后再提交 PR,避免不必要的沟通和反复审核
- 组件自认领后,请尽快完成,避免影响项目进度,如有困难也应及时提出