如何将相同样式的组件模式应用于已经存在的多个 svg 组件?

Posted

技术标签:

【中文标题】如何将相同样式的组件模式应用于已经存在的多个 svg 组件?【英文标题】:How can I apply the same styled components pattern to multiple svg components which already exist? 【发布时间】:2021-09-11 23:04:57 【问题描述】:

我已经看到如何将相同的样式用于多个组件(如 here 所示),方法是根据之前制作的组件制作一个组件,但同样的逻辑似乎不适合我的情况。

我像这样导入了我的 svg:

import  ReactComponent as UpsetEmoticon  from '../images/upset-emoticon.svg';

并使用样式组件来改变悬停颜色,如下所示:

const UpsetEmoticonStyled = styled(UpsetEmoticon)`
    & path 
        fill: white;
    
    &:hover 
        & path 
            fill: gray;
        
    
`;

我想将相同的样式应用于我以相同方式导入的多个 svg。我可以多次重复代码,将 styled() 中的 SVG 换掉,但如果有更简洁的方法,我会更喜欢。提前谢谢!

【问题讨论】:

【参考方案1】:

有几种方法可以解决这个问题。

    如果它们在同一层次结构中,您可以将样式提升到一个共同的祖先
const Wrapper = styled.div`
  svg 
    & path 
      fill: white;
    
    &:hover 
      & path 
        fill: gray;
      
    
  
`;

export default function App() 
  return (
    <Wrapper>
      <IconA />
      <IconB />
    </Wrapper>
  );

    使用 styled-component 的 as 属性
const StyledIcon = styled.svg`
    & path 
      fill: blue;
    

    &:hover 
      & path 
        fill: gray;
      
    
`;

export default function App() 
  return (
    <div>
      <StyledIcon as=IconA />
      <StyledIcon as=IconB />
    </div>
  );

【讨论】:

以上是关于如何将相同样式的组件模式应用于已经存在的多个 svg 组件?的主要内容,如果未能解决你的问题,请参考以下文章

Unix-在重命名文件时将相同文件从多个目录复制到新目录

您可以将相同类型的 GestureRecognizer 添加到一个视图中吗?

如何根据多个条件设置 React 组件的样式?

我如何将 CSS 应用于 VAADIN 8 中的组件

如何仅将 css 样式应用于特定的 Vue 组件及其子组件?

尝试将 :focus 样式应用于样式化组件内的嵌套 SVG