在 React JS 中更改 SVG 填充颜色

新手上路,请多包涵

考虑:

 import LOGO from './something.svg';
<img src={LOGO} className={'logo'} alt="Logo"/> //

如何在 ReactJS 中更改 SVG 的填充颜色?

我也尝试过使用 ReactComponent 但我得到了 'ReactComponent' is not exported from ....

 import { ReactComponent as Logo1 } from './something.svg';
<Logo1 /> // doesn't work : 'ReactComponent' is not exported from ....

原文由 JAN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

您必须在组件中导入反应,但要更改填充颜色,svg 必须作为组件调用,而不是将其作为 src 用于 img 标签。

例如,如果您有一个 svg 文件,请将其设为 React 组件,例如:

 import React from 'react';

const Icon = ({fill, className }) => (
  <svg className={className} version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <symbol id="umbrella" viewBox="0 0 596 597">
    <title>Umbrella</title>
    <desc>Umbrella icon</desc>
    <path fill={fill} class="shaft" d="M260.4,335.7 L260.4,478 C260.4,543.1 313.4,596.1 378.5,596.1 C443.6,596.1 496.6,543.1 496.6,478 C496.6,457.5 479.9,440.8 459.4,440.8 C438.9,440.8 422.2,457.5 422.2,478 C422.2,502.2 402.7,521.7 378.5,521.7 C354.3,521.7 334.8,502.2 334.8,478 L334.8,335.7 L260.4,335.7 L260.4,335.7 Z"></path>
    <path class="fabric" d="M558,335.7 C578.5,335.7 595.2,319 595.2,298.5 L595.2,294.8 C593.4,132 460.4,0.9 297.6,0.9 L297.6,0.9 C133.9,0.9 0,134.8 0,298.5 C0,319 16.7,335.7 37.2,335.7 L558,335.7 L558,335.7 Z M77.2,261.3 C94.9,156.2 187,75.3 297.6,75.3 C408.2,75.3 500.4,156.2 518,261.3 L77.2,261.3 L77.2,261.3 Z"></path>
  </symbol>
</svg>
);

export default Icon;

并使用 fill 调用组件中的图标。

 <Icon fill="#ffffff" className="myclass" />

另一种解决方案是传递一个类名,如 fill 属性,并在 CSS 中使用该类名来更改颜色,例如:

 .myclass path {
  fill: #ffffff;
}

原文由 Vishnu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题