返回
用 React + TypeScript 封装 UI 组件,摆脱第三方 UI 库的束缚
前端
2023-12-05 03:56:51
一个好的 UI 组件库可以让前端开发事半功倍。我们有许多第三方 UI 组件库可以选择,如 Material UI、Ant Design 和 Chakra UI。但这些组件库虽然强大,却也会带来一些限制。比如,它们的主题可能与你的项目设计不符,或者你可能需要自定义组件以满足特定需求。
脱离第三方 UI 组件库,用 React + TypeScript 封装自己的 UI 组件,可以让你拥有完全的控制权,打造出真正符合项目需求的组件。下面,我们将介绍如何用 React + TypeScript 封装一个简单的 Button 组件。
项目环境搭建
首先,你需要创建一个新的 React 项目并安装 TypeScript:
npx create-react-app my-demo --template typescript
然后,安装必要的依赖项:
npm install styled-components
项目依赖
在项目中,我们将使用 styled-components 来为我们的组件添加样式。
创建支持 TypeScript 的 React 项目
我们用以下命令创建一个支持 TypeScript 的 React 项目:
npx create-react-app my-demo --template typescript
封装 Button 组件
在 src
目录下创建一个名为 Button.tsx
的文件,并输入以下代码:
import styled from "styled-components";
import { forwardRef, ForwardRefRenderFunction } from "react";
const StyledButton = styled.button`
padding: 8px 16px;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #fff;
color: #000;
cursor: pointer;
&:hover {
background-color: #eee;
}
`;
const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({ children, ...props }, ref) => {
return (
<StyledButton {...props} ref={ref}>
{children}
</StyledButton>
);
}
);
export interface ButtonProps {
type?: "button" | "submit" | "reset";
}
export default Button;
在这个组件中,我们使用了 styled-components
来定义按钮的样式,并使用 forwardRef
来将按钮的 ref 传递给外部组件。
使用 Button 组件
在 App.tsx 中,我们可以使用 Button 组件:
import Button from "./Button";
const App = () => {
return (
<div>
<Button>Click me</Button>
</div>
);
};
export default App;
优点
脱离第三方 UI 组件库,用 React + TypeScript 封装自己的 UI 组件,有以下优点:
- 完全控制权: 你可以完全控制组件的外观、行为和功能。
- 更轻量级: 自己封装的组件通常比第三方组件更轻量级,因为它们只包含你需要的内容。
- 更高的可定制性: 你可以轻松地自定义组件以满足你的特定需求。
- 更好的性能: 自己封装的组件往往比第三方组件性能更好,因为它们没有不必要的代码。
当然,自己封装 UI 组件也有一些缺点,比如需要花费更多的时间和精力。但如果你需要高度定制化和完全控制,那么自己封装组件可能是值得的。