reactjs - 如何使用 typescript 扩展 react-bootstrap 组件?
问题描述
我正在使用react-bootstrap@1.0.0-beta.14
并且我正在尝试Button
使用 react-bootstraps 创建一个自定义组件Button
,添加另一个道具,isLoading
. 由于 react-bootstrap 类型的定义方式,我最终导入了一些辅助类型并复制了 react-bootstrap 类型的一部分:
import React from 'react'
import { Button as Btn, ButtonProps } from 'react-bootstrap'
import { BsPrefixProps, ReplaceProps } from 'react-bootstrap/helpers'
interface Props {
isLoading?: boolean
}
type BtnProps<As extends React.ElementType = 'button'> = ReplaceProps<
As,
BsPrefixProps<As> & ButtonProps
>
export const Button: React.FC<BtnProps & Props> = ({ isLoading, disabled, ...props }) => {
return <Btn {...props} disabled={isLoading || disabled} />
}
这几乎可以工作。我得到的错误是告诉我ref
道具类型是错误的:
属性“ref”的类型不兼容。
...
类型 '(instance: HTMLButtonElement | null) => void' 不可分配给类型 '(instance: Button> | null) => void'。
我删除了大部分错误消息以获取相关位。我是否需要将组件包装在 forwardRef 中才能完成这项工作?
解决方案
您可以在下面的代码中看到更好的方法。
import React from 'react';
import { Button, ButtonProps } from 'react-bootstrap'
interface PropType extends ButtonProps {
buttonText: string;
isSubmitting: boolean;
}
export const SubmitButton: React.FC<PropType> = (props: PropType) => {
let { isSubmitting, buttonText, ...remainingProps } = props;
return (
<Button variant="primary" type="submit" disabled={props.isSubmitting} style={{margin: 10}} {...remainingProps}>
{props.buttonText}
</Button>
)
}
推荐阅读
- calendar - 1) 每次刷新脚本编辑器时都无法删除谷歌日历事件中的重复项 2) 自定义菜单不起作用
- react-native - 如何让一个图像覆盖另一个图像?
- java - JPA 规范 - 检查多行中的值
- amazon-web-services - AWS Fargate 无法删除集群
- xcode - 无法在磁盘上安装 Safari Technology Preview
- google-apps-script - 用于 Google 表单中的动态下拉列表的 Google 脚本
- java - 在 onTouchListener 中检测 onLongPress 和 onClick 事件
- asp.net-core - Swagger UI 忽略 x-tokenName 扩展
- flutter - Flutter 本地通知自定义声音不起作用(路径问题)
- javascript - 模拟商店中的调度在 Jest 测试中引发错误