在 React 中使用 Sass 样式化 svg

Posted

技术标签:

【中文标题】在 React 中使用 Sass 样式化 svg【英文标题】:Styling svg in React with Sass 【发布时间】:2020-11-04 17:22:54 【问题描述】:

我用 React 完成了我之前的 2 个项目,并使用 Sass 文件来设置组件的样式。但是在这个项目中,它变得有点令人困惑,因为我必须为我的图像使用 SVG。现在我被困在使用 Sass 文件设计 SVG 样式上。

这是codesandbox,仅包括我想要更改logoBookmark svg颜色的navbar组件。

我不想粘贴整个 xml 内容。所以我直接导入了 SVG

import logoBookmark from "../../images/logo-bookmark.svg",

并将src=logoBookmark 设置为img 标签。

为了设置外部 SVG 的样式,我在堆栈溢出时发现了这个简单的 solution。

但我不知道如何在 React 中实现这一点,我有一个 Sass 文件,该文件被进一步导入 JSX 文件中。

那么有人可以分享这个问题的最佳解决方案吗?

【问题讨论】:

请展示一个可重现的示例,请参阅How do I ask a good question?、How to create a Minimal, Reproducible Example。向我们展示一个带有 svg 的沙箱 (codesandbox)、您尝试设置的样式、尝试过的内容以及无效的内容。在 *** 中,我们提出的是具体问题,而不是“最佳解决方案”,这对于一个问题来说过于宽泛,并且取决于项目。 @DennisVash 我提供了代码框链接。我正在寻找更改 JSX 文件中 importlogoBookmark 的颜色。 请注意,这不是一个最小的示例,相反,您应该只显示 SVG 而没有围绕它的所有项目。 【参考方案1】:

您需要将 SVG 作为组件导入,以便将其安装为 <svg/> 而不是 <img/>。 See adding SVG in CRA.

那么你只需要使用 CSS 定位 circlesvg

.logo 
    circle 
        fill: red;
    


import  ReactComponent as Logo  from "../../images/logo-bookmark.svg";

export default function NavBar() 
  return (
    <nav className="navbar">
      <div className="brand">
        <a href="/">
          <Logo className="logo" />
        </a>
      </div>
    </nav>
  );

【讨论】:

以上是关于在 React 中使用 Sass 样式化 svg的主要内容,如果未能解决你的问题,请参考以下文章

为 React 搜索栏使用带有嵌套样式的样式化组件,尝试将两个不同的 SVG 放置在搜索栏的相对两侧

如何使用样式化组件在 reactjs 中设置 svg 样式

使用 SVG 导入对样式化组件进行单元测试

样式化组件 + 故事书:当我传递新样式时,SVG 图标不会重新渲染

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

无法在 React 中正确使用 SASS/SCSS 样式