如何做组件设计?
- 确定组件的功能和用途
- 制定组件的 API
- 设计组件的外观和交互
- 编写组件的实现代码
- 进行组件测试和验证
- 提供组件的文档和示例
- 审查和优化组件
保持组件的可扩展性是非常重要的,以及对外文档,在使用者使用组件的时候,一定是通过查看开发文档来实现组件操作的,不可能要求开发者去查看组件的源码调用,那样并不高效
借鉴 arco-design,开源社区,查看开发文档的书写案例
编写好的组件的过程
- 遵循组件设计的原则。遵守编写API规范
语义化命名:功能在名称中直观展示清晰明了
包名和组件名一致:
单独维护类型文件:
类名前缀统一:组件使用特殊且统一的类名前缀,尽量降低与用户类名冲突的可能性
接口定义:在为组件定义接口类型时,应继承原生DOM或基础组件属性,避免属性遗漏或重复声明
逻辑和样式分离:
如何制作组件定义?
使用 TypeScript。在 TypeScript 中,可以使用 extends 关键字继承原生 DOM 或基础组件的属性。例如,如果要为一个按钮组件定义类型,可以这样写:
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
// 添加组件自定义属性
...
}
ButtonProps 接口就继承了 React.ButtonHTMLAttributes 接口中定义的所有属性,包括 className、onClick 等。在定义组件时,就可以使用 ButtonProps 来指定组件的属性类型
实战设计组件
例子:
提取功能要点:
逻辑思路:
API定义:
核心实现:
引导组件
什么是引导组件?
- 引导组件(Guided Tour Component)是一种常见的用户体验组件,用于向用户介绍应用程序的各种功能和特性。引导组件一般会以一系列步骤的形式展示,每个步骤会包含一些说明文本、图片、动画等,帮助用户快速了解应用程序的各种功能
- 引导组件通常会在用户首次访问应用程序时自动触发,也可以由用户手动启动
如何支持用户直接控制引导步骤的跳转?
- 增加 API。可以在引导组件中增加一个 API,例如
goToStep(stepNumber: number),用于跳转到指定步骤。用户可以在外部调用这个 API,实现直接跳转 - 增加事件。可以在引导组件中触发一个事件,例如
stepChange,用于在步骤切换时通知外部。用户可以监听这个事件,在外部处理相应的逻辑,例如显示当前步骤的编号、更新进度条等。
import React, { useState } from 'react';
function GuidedTour({ steps }) {
const [currentStep, setCurrentStep] = useState(0);
function goToStep(stepNumber) {
setCurrentStep(stepNumber);
}
function handleNext() {
setCurrentStep(currentStep + 1);
}
function handlePrev() {
setCurrentStep(currentStep - 1);
}
return (
<div>
<h2>{steps[currentStep].title}</h2>
<p>{steps[currentStep].content}</p>
<button disabled={currentStep === 0} onClick={handlePrev}>
Previous
</button>
<button
disabled={currentStep === steps.length - 1}
onClick={handleNext}
>
Next
</button>
<button onClick={() => goToStep(0)}>Go to Step 1</button>
<button onClick={() => goToStep(1)}>Go to Step 2</button>
<button onClick={() => goToStep(2)}>Go to Step 3</button>
</div>
);
}
GuidedTour组件接受一个steps属性,用于定义引导步骤- 组件内部维护一个
currentStep状态,表示当前所在的步骤 - 组件还提供了三个按钮,用于直接跳转到指定步骤。用户可以通过这些按钮直接控制引导步骤的跳转
如何支持用户透传Popover属性?
- 在组件的Props中定义一个名为"popoverProps"的对象类型属性,该属性的值为Popover组件的Props类型
- 在组件内部,将"popoverProps"作为Popover组件的Props进行传递即可
import React from 'react';
import PropTypes from 'prop-types';
import { Popover } from 'arco-design';
const MyComponent = ({ text, popoverProps }) => {
return (
<Popover {...popoverProps}>
<div>{text}</div>
</Popover>
);
};
MyComponent.propTypes = {
text: PropTypes.string.isRequired,
popoverProps: PropTypes.object
};
export default MyComponent;
它接收Popover组件的Props类型。在组件的渲染方法中,我们将这个属性透传给Popover组件,这样就可以支持用户自定义Popover组件的属性了
什么是 Popover 属性?
"Popover" 属性指的是在弹出窗口中显示的内容和样式。在 React 组件开发中,Popover 属性通常与弹出框组件(如 Tooltip、Modal、Popover 等)相关联