reactjs - 如何向 Material-UI 组件添加自定义变体(React / Typescript)
问题描述
我正在尝试基于具有其他样式的 Material-ui 组件创建自定义组件。
因此,例如,Tab 组件有variant = ["standard","scrollable","fullWidth"],我想在variant 中添加'outlined'。
这是我的试验:
import Tabs, { TabsProps } from '@material-ui/core/Tabs';
export interface Test extends TabsProps {
variant?: 'standard' | 'scrollable' | 'fullWidth' | 'outlined'
}
并使用此变体道具返回 Tab。
export const MyTabs = (props: Test) => {
return (
if (props.variant === 'outlined') {
return (
<Tabs
{...props}
/>
);
}
);
}
但是,当我导入此组件并使用时,控制台上出现错误。消息是:
道具类型失败:提供给的道具
variant
值无效,应为 ["standard","scrollable","fullWidth"] 之一。outlined
ForwardRef(Tabs)
如何在变体中正确添加更多值?
解决方案
包括TabProps['variant']
作为您的组件道具variant
并合并'outlined'
.
编辑:正如 mattwad 在评论中解释的那样,在扩展界面时省略此道具,然后将其包含在自定义的界面中。
另外,我认为包装return
语句不应该存在,不确定它是否是复制/粘贴问题:
import Tabs, { TabsProps } from "@material-ui/core/Tabs";
export interface Test extends Omit<TabsProps, "variant"> {
variant?: TabsProps["variant"] | "outlined";
}
export const MyTabs = (props: Test) => {
if (props.variant === "outlined") {
return <Tabs {...props} />;
}
return //...
};
推荐阅读
- json - 字段的颠簸变换顺序
- javascript - 数组映射不起作用后递减
- django - 姜戈 | 休息 | 添加顶级 JSON 字段中断过滤选项
- java - 使用 Reactor Netty HttpClient,如何将客户端配置为使用 Flux 发布者将多个项目发送到服务器?
- html - 下拉菜单在移动设备上时不显示
- sql - ORACLE - 在大表上设置重复的排名,需要优化
- android - 我能知道输入变量为什么它总是给我错误,非常感谢
- java - 用户输入值后在 Java 中循环
- amazon-web-services - 当 AWS Glue 工作流程完成时,是否可以发布到 SNS?
- javascript - 类似数组/映射的数据结构,具有对项目的唯一 ID 支持、O(1) get() 方法且无重复