如何在 ToggleButton 中更改 select 上的 SVG 图标颜色

How to change SVG icon color on select in ToggleButton

我的项目中有 4 个来自 MUI 的 ButtonGroup,其中每个按钮组都有 SVG 图标和子项作为按钮的名称。尽管按钮和名称的背景在 selected 后有效,但 SVG 图标始终保持相同的颜色。如何让它工作并且 SVG 图标也会在 select 上改变颜色?

下面是构建示例:

 <StyledToggleButtonGroup
                            color="warning"
                            value={alignment}
                            exclusive
                            onChange={handleAlignment}
                        >
                            <StyledToggleButton
                                aria-label={DetailsTranslation}
                                onClick={() => handleGoToDetails()}
                                value={Routes.TrainsDetails.path}
                                aria-pressed="true"
                            >
                                <StyledDetailsIcon />
                                {DetailsTranslation}
                            </StyledToggleButton>
                            <StyledToggleButton
                                aria-label={LinesTranslation}
                                onClick={() => handleGoToLines()}
                                value={Routes.TrainsDetailsLines.path}
                            >
                                <StyledLinesIcon />
                                {LinesTranslation}
                            </StyledToggleButton>
                            <StyledToggleButton
                                aria-label={WheelsTranslation}
                                onClick={() => handleGoToWheels()}
                                value={Routes.TrainsDetailsWheels.path}
                            >
                                <StyledWheelIcon />
                                {WheelsTranslation}
                            </StyledToggleButton>
                            <StyledToggleButton
                                aria-label={ServiceTranslation}
                                onClick={() => handleGoToService()}
                                value={Routes.TrainsDetailsService.path}
                            >
                                <StyledServiceIcon />
                                {ServiceTranslation}
                            </StyledToggleButton>
                        </StyledToggleButtonGroup>
                    </TrainsDetailsToolbarWrapper>

第一个按钮的样式:

 export const StyledToggleButton = styled(ToggleButton)`
        font-size: 1.6rem;
        font-weight: bold;
        font-family: Poppins;
        margin: 0.5rem;
        padding: 0.5rem 1rem 0.5rem 1.5rem;
        border-radius: 0.4rem;
        border: none;
    `;
    export const StyledDetailsIcon = styled(MenuIcon)`
        margin-right: 1.3rem;
    `;

这是 MenuIcon 的定义,属于使用的图标

/// <reference types="react" />
/// <reference types="react-dom" />

declare module '*.svg' {
  import * as React from 'react';

  export const ReactComponent: React.FunctionComponent<
    React.SVGProps<SVGSVGElement> & { title?: string }
  >;

  const src: string;
  export default src;
}

declare module '*.bmp' {
  const src: string;
  export default src;
}

declare module '*.gif' {
  const src: string;
  export default src;
}

declare module '*.jpg' {
  const src: string;
  export default src;
}

declare module '*.jpeg' {
  const src: string;
  export default src;
}

declare module '*.png' {
  const src: string;
  export default src;
}

declare module '*.webp' {
  const src: string;
  export default src;
}

ToggleButton 中的 a selected class 可以使用样式、sx 属性或通过全局主题覆盖来覆盖。

export const StyledToggleButton = styled(ToggleButton)`
  font-size: 1.6rem;
  font-weight: bold;
  font-family: Poppins;
  margin: 0.5rem;
  padding: 0.5rem 1rem 0.5rem 1.5rem;
  border-radius: 0.4rem;
  border: none;
  &.Mui-selected .MuiSvgIcon-root {
    color: red;
  }
`;

export const StyledDetailsIcon = styled(MenuIcon)`
  margin-right: 1.3rem;
  color: blue;
`;

这是我检查时添加到 ToggleButton 的 class

查看组件状态列表及其关联的 class 名称 here

const StyledToggleButton = styled(ToggleButton)`
  &.Mui-selected {
    color: red;
    background-color: pink;
    /* Put your styles to apply in selected state here */
  }
`;