React封装组件的问题

欢迎关注我的公众号噢!

以Button为例

在封装Button组件的时候,可能会遇到使用自己封装的组件使用不了className以及style属性的问题。

解决办法

可以使我们自己的接口来继承原生button的接口

<ButtonHTMLAttributes<HTMLElement> //原生button
export interface ButtonProps extends <ButtonHTMLAttributes<HTMLElement>> {
}

但也许会遇到 接口“ButtonProps”错误扩展接口“ButtonHTMLAttributes<HTMLElement>” 的问题。

是因为自己封装的接口里有一些属性和原生button冲突了,例如 ' type ',' disabled ' 等等。

这就要用到ts里的Omit,从类型中剔除一些属性。

剔除一个属性: 

Omit< React.InputHTMLAttributes<HTMLInputElement>, 'type'>

剔除多个属性:

Omit<ButtonHTMLAttributes<HTMLElement>, "type" | "disabled">
export interface ButtonProps
  extends Omit<ButtonHTMLAttributes<HTMLElement>, "type" | "disabled"> {
  type?: ButtonType;
  variant?: ButtonStyle;
  size?: ButtonSize | string;
  children?: string;
  disabled?: Boolean;
  anime?: Boolean;
  shape?: ButtonShape;
  onClick?: () => void;
}

解决完接口的问题后,还需要在原生的button上加上属性

 当然,Input之类的也是同理,这样就大功告成了。

也欢迎访问我的组件库!蓝莓组件库  😆

### React 封装组件示例 在创建可重用的 React 组件时,通常会遵循一些最佳实践来确保组件既模块化又易于维护。下面是一个简单的按钮组件封装例子。 #### 创建基础按钮组件 定义一个名为 `Button` 的功能型组件,该组件接受两个属性:`label` 和 `onClick`: ```jsx import React from 'react'; const Button = ({ label, onClick }) => { return ( <button className="btn" onClick={onClick}> {label} </button> ); }; export default Button; ``` 此代码片段展示了如何构建一个基本的功能型组件[^1]。 #### 添加样式支持 为了使组件更加通用,在项目中引入 CSS 文件并将其应用于组件内: ```css /* styles.css */ .btn { background-color: blue; color: white; padding: 8px 16px; border-radius: 4px; cursor: pointer; } .btn:hover { opacity: 0.9; } ``` 接着更新 JavaScript 文件以导入这些样式: ```jsx import './styles.css'; // ...其余部分保持不变... ``` 通过这种方式可以轻松地自定义外观而无需修改核心逻辑。 #### 提供默认参数与类型检查 利用 TypeScript 或者 PropTypes 来增强开发体验以及减少潜在错误的发生几率。这里采用 PropType 方式为例说明: ```jsx import PropTypes from 'prop-types'; Button.propTypes = { label: PropTypes.string.isRequired, onClick: PropTypes.func.isRequired, }; ``` 这一步骤有助于提高应用程序的质量控制水平。 #### 打包发布至 NPM 当完成本地测试之后,如果希望分享给其他开发者,则需按照特定结构整理源码,并配置好必要的打包工具链如 Webpack 。最终调整 `package.json` 中的相关字段以便于他人安装使用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值