【问题标题】:How to Add Custom Variant to Material-UI Component (React / Typescript)如何向 Material-UI 组件添加自定义变体(React / Typescript)
【发布时间】:2020-03-13 05:10:10
【问题描述】:



我正在尝试创建一个 基于 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}
            />
        );
    }
  );
}

但是,当我导入此组件并使用时,控制台出现错误。 消息是:

道具类型失败:提供给ForwardRef(Tabs) 的道具variant 的价值outlined 无效,应为["standard","scrollable","fullWidth"] 之一。

如何在变体中正确添加更多值?

【问题讨论】:

  • Material-UI v5 支持添加自定义变体。请参阅this 答案。

标签: reactjs typescript material-ui


【解决方案1】:

TabProps['variant'] 包含为您的组件道具variant 并合并'outlined'

编辑:正如 mattwad 在 cmets 中解释的那样,在扩展接口时省略此属性,然后将其包含在自定义接口中。

另外,我认为包装 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 //...
};

【讨论】:

  • 感谢您的建议!但仍然收到相同的错误消息..
  • @doobean,不客气。问题是 Tabs 需要一个 variant 道具,这正是来自 TabsProps 的道具。我相信解决它的唯一方法是定义/创建一个新的 Tabs 组件(可以说是它的克隆),它以您想要的方式接收道具。
  • 为了让它工作,你需要在扩展它之前从接口中删除 'variant' 属性:export interface Test extends Omit { variant?: TabsProps [“变体”] | “概述”; }
猜你喜欢
  • 2019-09-05
  • 1970-01-01
  • 2021-11-14
  • 2018-11-23
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
相关资源
最近更新 更多