我有:

const Button: React.FC<ButtonProps> = ({
  label,
  size,
  variant = 'primary',
  disabled = false,
}: ButtonProps) => {
  const classes = useStyles();
  return (
    <MaterialButton
      className={`${classes.buttonBase} size-${size}`}
      disabled={disabled}
    >
      {label}
    </MaterialButton>
  );
};

const useStyles = makeStyles(() => ({
  buttonBase: {
    background:'#000000',
    color: '#ffffff',

However, if variant is secondary, I want to basically swap the backgroundcolor. How do I go about doing this?

推荐答案

你可以在你的主题中设置它. 下面的示例用于将VARIANT="CONTAINED"与COLOR="SERVICE"一起使用

export const theme = createTheme({
  components: {
    MuiButton: {
      styleOverrides: {
        containedSecondary: {
          backgroundColor: '#808080',
          color: '#FFFFFF',
          '&:hover': {
            backgroundColor: '#565656',
          },
        },
      }
    }
  }

<Button variant="contained" color="secondary">Test button</Button>

或者,如果您想要在组件中设置样式,您可以为次要组件设置一个变量,如下所示.这是一张codesandbox英镑的工作钞票

const useStyles = makeStyles({
  primary: {
    backgroundColor: "purple",
    color: "#FFF"
  },
  secondary: {
    backgroundColor: "red",
    color: "#FFF"
  }
});

<Button className={classes.secondary}>Secondary</Button>
<Button className={classes.primary}>Primary</Button>

Typescript相关问答推荐

根据第一个参数的值设置第二个参数的类型

TypeScript:在作为参数传递给另一个函数的记录中对函数的参数实现类型约束

泛型类型联合将参数转换为Never

是否使用非显式名称隔离在对象属性上声明的接口的内部类型?

为什么在回调函数的参数中不使用类型保护?

我可以以这样一种方式键入对象,只允许它的键作为它的值吗?

对未到达受保护路由的路由环境做出react

嵌套对象的类型

以Angular 自定义快捷菜单

TypeScrip:强制使用动态密钥

vue-tsc失败,错误引用项目可能无法禁用vue项目上的emit

@TANSTACK/REACT-QUERY中发生Mutations 后的数据刷新问题

如何在省略一个参数的情况下从函数类型中提取参数类型?

使用或属性编写无限嵌套的接口

如何将通用接口的键正确设置为接口的键

编剧- Select 动态下拉选项

TypeScrip:从嵌套的对象值创建新类型

窄SomeType与SomeType[]

从联合提取可调用密钥时,未知类型没有调用签名

从泛型对象数组构造映射类型