material-ui [Chip] 它应该接受自定义颜色,

6tr1vspr  于 6个月前  发布在  其他
关注(0)|答案(3)|浏览(49)

重复

  • 我搜索了现有的问题

最新版本

  • 我测试了最新版本

总结 💡

Chip 组件接受一个 color 属性,但它只能引用主题中的颜色:

<Chip label="primary" color="primary" />

可以通过 Package ThemeProvider 提供自定义颜色,例如:

export const ColorChip: React.FunctionComponent<ColorChipProps> = (props) => {
  return (
    <ThemeProvider
      theme={(theme: Theme) =>
        createTheme({
          ...theme,
          palette: {
            ...theme.palette,
            primary: {
              main: props.color.color,
            },
          },
        })
      }
    >
      <Chip
        color="primary"
        label={props.color.name}
        onClick={() => props.onSelectedChange(!props.isSelected)}
        variant={props.isSelected ? 'filled' : 'outlined'}
        sx={{
          border: props.isSelected ? `1px solid ${props.color.color}` : undefined,
        }}
      />
    </ThemeProvider>
  )
}

这没问题,直到同时更改多个这些芯片时-重新插入 ThemeProvider 组件非常慢(38个芯片需要5秒以上,同时UI冻结)。
另一种方法是覆盖背景颜色,例如:

export const ColorChip: React.FunctionComponent<ColorChipProps> = (props) => {
  const styleOverride = props.isSelected ? {backgroundColor: props.color.color} : {}
  return (
    <Chip
      color="primary"
      label={props.color.name}
      onClick={() => props.onSelectedChange(!props.isSelected)}
      variant={props.isSelected ? 'filled' : 'outlined'}
      sx={{
        border: props.isSelected ? `1px solid ${props.color.color}` : undefined,
      }}
      style={styleOverride}
    />
  )
}

这个选项的问题在于它需要一些关于组件实现的知识-例如,不覆盖主要颜色意味着MUI无法确定是否应该使用深色或浅色文本颜色,悬停效果会失效...
允许直接使用自定义颜色可能不会是组件本身的复杂更改,但可以解决这两个问题。

示例 🌈

可以使用以下方式:

<Chip
  color="#123abc"
  label='label'
/>

动机 🔦

如上所述,这是为了让组件更具灵活性。

zbsbpyhn

zbsbpyhn1#

我可以处理这个问题/改进吗?

k2arahey

k2arahey2#

我不太确定我是否理解了你的问题。根据我的理解,我建议你直接使用 sx prop 来使用自定义颜色:例如,<Chip sx={{color: "#123abc"}} .../>
如果这不是你要解决的问题,请提供一个精确重现问题的 CodeSandbox(https://material-ui.com/r/issue-template-latest)。

idv4meu8

idv4meu83#

更改颜色会更改文本颜色,但不会改变其他任何东西。在轮廓变体中,这会错过更改边框。在填充中,文本的颜色永远不应该改变,相反,背景应该改变颜色。

以下是填充/轮廓与ThemeProvider/sx颜色的组合:https://codesandbox.io/s/charming-stitch-3fei4w?file=/src/App.tsx
ThemeProvider选项实现了我想要的效果,但正如问题描述中所解释的那样,在显示具有自定义颜色的30多个芯片时,性能非常差。

相关问题