import React, { FC, ButtonHTMLAttributes, AnchorHTMLAttributes } from 'react'; import classNames from 'classnames'; export type ButtonType = 'primary' | 'default' | 'danger' | 'link'; export type ButtonSize = 'lg' | 'md' | 'sm'; interface IBaseButtonProps { /** 按钮的大小 */ size?: ButtonSize; /** 按钮的类型 */ type?: ButtonType; /** 按钮是否禁用 */ disabled?: boolean; /** 同A标签的原生属性 */ href?: string; className?: string; children?: React.ReactNode; } type INativeButtonProps = ButtonHTMLAttributes; type INativeAnchorProps = AnchorHTMLAttributes; export type ButtonProps = IBaseButtonProps & Omit; /** * 页面中最常用的的按钮元素,适合于完成特定的交互 * ### 引用方法 * ~~~js * import { Button } from 'button-ui-react' * ~~~ */ export const Button: FC = (props) => { const { size, type, disabled, href, className, children, ...rest } = props; const prefixCls = 'g-btn'; const classes = classNames(prefixCls, { [`g-btn-${size}`]: size, [`g-btn-${type}`]: type, disabled: href && type === 'link' && disabled, }, className) return ( href && type === 'link' ? {children} : ) } Button.defaultProps = { disabled: false, size: 'md', type: 'default' } export default Button;