谁能解释一下 Material-UI 如何扩展其 propsButton
如果我在component
prop?
interface MyLinkProps extends ButtonBaseProps {
someRandomProp: string
}
const MyLink: React.FC<MyLinkProps> = () => {
return <div></div>
}
<Button component={MyLink} someRandomProp="random">Something</Button>
正如在本例中,Button
组件现在知道了someRandomProp
属于我的组件的 prop;正在传递给component
支撑在Button
成分。
我想达到同样的效果。我有一个带有 prop 的图像组件component
我想推断正在传递的组件的属性。
例如,如果有类似的内容:
<MyImage component={NextImage} {...propsOfNextImage} />
基本上,我想要MyImage
自动检测并扩展 propsNextImage
.
可以看到类型定义OverridableComponent
here,这个负责合并可重写组件与组件的原始道具。
作为参考,请参阅如何在 MUI 组件中使用它here。第一个泛型类型参数是具有以下属性的类型:
-
props
:组件的原始 props 在与可重写组件的 props 合并之前。
-
defaultComponent
:默认根组件(如果您未提供任何根组件)。
import { OverridableComponent } from '@mui/material/OverridableComponent';
interface MyImageProps {
src: string;
myCustomProps?: string;
}
interface MyImageTypeMap {
props: MyImageProps;
defaultComponent: 'img';
}
const MyImage: OverridableComponent<MyImageTypeMap> = (props) => {
const RootComponent = props.component || 'img';
return (
<RootComponent src={props.src} {...props}>
{props.children}
</RootComponent>
);
};
Usage
{/* normal component with MyImageProps. The root component is an img element */}
<MyImage src={src} />
{/* component with MyImageProps & ButtonProps. The root component is a Button*/}
<MyImage src={src} component={Button} variant="contained">
I am actually a button in disguise
</MyImage>
现场演示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)