material-ui 无法为SVG图标创建变体

polhcujo  于 6个月前  发布在  其他
关注(0)|答案(8)|浏览(60)

重复问题

  • 我搜索了现有的问题

最新版本

  • 我测试了最新版本

重现步骤 🕹

使用WebStorm并尝试为SvgIcon创建自定义color变体,如default,它是#434A54

export const muiTheme = createTheme({
    palette: {
      default: {
        main: '#434A54',
      },
    },
    components: {
      MuiIcon: {
        variants: [
          {
            props: {
              // TODO
              // color: 'default',
            },
            style: {
              color: theme.black,
            },
          },
        ],
      },
    },
    plPL,
  },
);

declare module '@mui/material/styles' {
  interface Palette {
    default: Palette['primary'];
  }

  interface PaletteOptions {
    default: PaletteOptions['primary'];
  }
}

declare module '@mui/material/Icon' {
  interface IconPropsColorOverrides {
    default: true;
  }
}

declare module '@mui/material/SvgIcon' {
  interface SvgIconPropsColorOverrides {
    default: true;
  }
}

当前行为 😯

无法将名为default的颜色添加到MuiSvgIcon;我在组件或其他任何地方都没有提示(只有默认颜色可用)。

预期行为 🤔

主题中不应有任何错误,自定义颜色应显示在提示中

上下文 🔦

我的朋友在VSCODE上没有这样的问题,只有我在WebStorm上有这个问题:|

你的环境 🌎

  • 无响应*
ej83mcc0

ej83mcc01#

在Joy UI中,图标组件需要主题调色板颜色的概念,就像其他组件一样:
@siriwatknp 为什么图标组件需要主题调色板颜色的概念?我是说,为什么通用的sx属性API不够用?

e5nszbig

e5nszbig2#

sx 属性用于(本地)自定义。拥有 color 属性允许您创建自己的主题。例如,在 iOS 主题中,颜色可能是 primary 颜色(系统蓝色):

createTheme({ // or extendTheme
  components: {
    SvgIcon: {
      defaultProps: {
        color: 'primary',
      }
    }
  }
})

在某些主题中,您可能希望使用 default 颜色或 neutral 颜色(在 Joy UI 中),这是无法使用 sx 属性实现的。

brvekthn

brvekthn3#

你不能用sx prop来实现这个功能。

@siriwatknp 我正在考虑使用sx prop进行一次性定制。对于主题,我认为styleOverrides 是为了涵盖这个用例。但即使对于iOS,图标颜色可能需要color: inherit 的案例太多,将蓝色设置为默认图标颜色是行不通的。

我不明白为什么图标需要特殊处理颜色,这证明使用普通的CSS颜色定制API是不够的,意味着需要一个专用的colorpalettecolorText 属性。对于按钮,我知道为什么需要它,因为添加一个颜色CSS属性之外还有很多其他操作。

我认为在Material UI v1左右引入color 属性的初衷是为了保持API的一致性,但我们已经看到了它可能会带来#32141(评论)的行为上的惊喜和困惑,以及它会创建不同的方式来完成同样的事情,从而增加复杂性。这让我不禁思考:使用这个属性到底是更好还是更糟?

你可能想要保留默认颜色,
我认为在v5中删除了default 作为有效的颜色值,根据#13028

zvokhttg

zvokhttg4#

主题中不应有任何错误,提示中应可见自定义颜色。
你能提供一个可复现错误的CodeSandbox吗?

wz3gfoph

wz3gfoph5#

解:根据题意,可知$x+y=10$,所以和一定时,一个加数越大,另一个加数越小.

答:选B.

nvbavucw

nvbavucw6#

由于问题缺少关键信息且已处于7天不活跃状态,因此已被自动关闭。如果您希望看到问题重新打开,请提供缺失的信息。

vqlkdk9b

vqlkdk9b7#

@rajithaw 代码表示MUI v6将移除color组件的IconSvgIcon属性。
material-ui/packages/mui-material/src/SvgIcon/SvgIcon.js
第52行到第53行:
| | // TODO v5 deprecate, v6 remove for sx |
| | color: |
所以,这将起作用:

-<Icon color="customColor">home</Icon>
+<Icon sx={{ color: 'customColor.main' }}>home</Icon>

https://stackblitz.com/edit/react-zws3or-lndpfm?file=demo.tsx
我们还有关于能够添加新属性的问题,例如与主题相关的color属性。我猜这将适用于@AdamZajler,一旦我们移除了color属性。
@siriwatknp 这是否适用于Joy UI?如果不行,那么我更倾向于让Material UI与Joy UI保持一致。

ccgok5k5

ccgok5k58#

@siriwatknp 这个是否适用于Joy UI?如果不适用,那么我更倾向于在Joy UI上对齐Material UI。
我不会在Joy UI中删除color属性,因为它与其他组件一样引用主题调色板:

<SvgIcon color="primary" />;

// You can't do this
<SvgIcon color="primary.main" />;

然而,我很乐意进一步讨论,以使Material UI和Joy UI保持一致。
参考:我们在#32141(评论)中讨论了color属性名称。

相关问题