Как изменить цвет источника SVG в тег IMG? - PullRequest
2 голосов
/ 18 января 2020

Я пытаюсь изменить цвет значка svg с черного на белый, когда предоставляется цветовая опора.

export class CategoryIconComponent extends React.Component {


static displayName = 'CategoryIcon';

  state = { icon: null };

  static propTypes = {
    title: PropTypes.string,
    color: PropTypes.string,
  };

  static defaultProps = {
    title: null,
    color: '#fff',
  };

  componentDidMount() {
    const { title } = this.props;

    if (getTopCategoryIcon('Concrete Contractors') != null){

    if(typeof getTopCategoryIcon('Concrete Contractors') === 'string'){
      this.setState({ icon: getTopCategoryIcon('Concrete Contractors') });
    }

   else{
      getTopCategoryIcon(title).then((newIcon) => {
        this.setState({ icon: newIcon });
      });
    }
  }
}

  render() {
    const { icon } = this.state;
    const { color } = this.props;

    return (
      icon && (
        <TextIconContainer>

           // I want to be able to change color of the icon from black to white via color prop here
           // something like
          <img src={icon} width={25} height={25} color={color} />
        </TextIconContainer>
      )
    );
  }

Есть ли способ css сделать это? или любым другим способом я могу подключиться к компоненту svg и изменить его?

enter image description here

1 Ответ

1 голос
/ 18 января 2020

Я не верю, что есть способ сделать это с SVG, размещенным через тег изображения, но я смог добиться этого, используя SVG как простые компоненты React:

import React from 'react'

export const MySvg = ({ color }) => (
  <svg style={{ fill: color }}>
    ...
    ...
  </svg>
)

И затем используя в вашем компоненте:

<MySvg color={color} />

Я не рассматриваю это как обходной путь, или как хак - как раз наоборот. Я смог добиться впечатляющего оформления и настройки с помощью этой техники.

Очевидно, вы можете расширить этот метод для непосредственного управления заливкой:

export const MySvg = ({ color }) => (
  <svg fill={color}>
    ...
    ...
  </svg>
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...