请问老师关于ref的类型定义
来源:4-11 精益求精 - Buton 组件编码第二部分

hy_wang
2021-08-16
老师你好这里我把老师的button
做了一个forwardRef
的转发
import React, { forwardRef } from 'react';
import { ButtonSize, ButtonType } from './constant';
import classnames from 'classnames';
interface BaseButtonProps {
children?: React.ReactNode;
size?: ButtonSize;
btnType?: ButtonType;
disabled?: boolean;
href?: string;
}
type NativeButtonProps = React.ButtonHTMLAttributes<HTMLElement> &
BaseButtonProps;
type AnchorButtonProps = React.AnchorHTMLAttributes<HTMLElement> &
BaseButtonProps;
export type ButtonProps = Partial<NativeButtonProps & AnchorButtonProps>;
const prefix = 'hy';
const Button: React.FC<ButtonProps> = forwardRef<
HTMLButtonElement,
ButtonProps
>((props, ref) => {
const { className, btnType, disabled, size, children, href, ...restProps } =
props;
const classes = classnames(
`${prefix}-btn`,
`${prefix}-btn__${size}`, // 大小
`${prefix}-btn__${btnType}`, // 类型
{ 'is-disabled': disabled }, // 是否禁用
className // 用户自定义className
);
if (btnType === 'link') {
return (
<a className={classes} href={href} {...restProps}>
{children}
</a>
);
} else {
return (
<button ref={ref} className={classes} disabled={disabled} {...restProps}>
{children}
</button>
);
}
});
Button.defaultProps = {
btnType: 'default',
size: 'lg',
};
export default Button;
但是外层调用时候,ref
属性TS会报错。我不清楚应该如何解决,我传递ref是第二个参数。难道我要写入buttonProps
中定义吗
写回答
1回答
-
同学你好 将
const Button:React.FC<ButtonProps> 这个定义删除, 让他自动推论成等号后面的类型,这样这个类型就有 ref 属性了。 // 初始化 const buttonRef = useRef<HTMLButtonElement>(null) 然后再赋值试试看
00
相似问题