Различные иконки SVG рендеринга одинаковы? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть две SVG-иконки, которые я импортирую в свое приложение реагирования, используя "act-svg-loader "

Значки импортируются как компоненты со своими собственными путями, но выходные данные остаются теми же, для которых значок всегда является первым в коде.

Почему это происходит и как я могу это исправить?

Вот мой код:

import React, { Component } from 'react';

import Navigation from '../Navigation/index.js';
import MainLogo from '../MainLogo/index.js';
import Search from '../Search/index.js';
import './index.css'; // styles from

import Logo from '../../assets/svg/logos/Voo_Main.svg';
import SearchIcon from '../../assets/svg/icons/search.svg';

export default class Header extends Component {

  render() {
    const { navItems } = this.props;

    return (
      <header className="header">

        <SearchIcon />
        <Logo />
      </header>
    );
  }
};

Вот вывод:

enter image description here

Вот мой загрузчик в моей конфигурации webpack:

// react-svg-loader
// https://www.npmjs.com/package/react-svg-loader
{
    test: /\.svg$/,
    use: [
             {
                 loader: "babel-loader",
             },
             {
                 loader: "react-svg-loader",
                 options: {
                     jsx: true, // true outputs JSX tags
                 },
             },
         ],
},

Вот код для значков SVG из DOM:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
  <defs>
    <path id="a" d="M14.5 16A6.508 6.508 0 0 1 8 9.5C8 5.916 10.916 3 14.5 3S21 5.916 21 9.5 18.084 16 14.5 16m0-15C9.813 1 6 4.813 6 9.5c0 1.983.688 3.807 1.832 5.254l-6.539 6.539a.999.999 0 1 0 1.414 1.414l6.539-6.539A8.443 8.443 0 0 0 14.5 18c4.687 0 8.5-3.813 8.5-8.5C23 4.813 19.187 1 14.5 1"></path>
  </defs>
  <g fill="none" fill-rule="evenodd">
    <mask id="b" fill="#fff">
      <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#a"></use>
    </mask>
    <use fill="#D3D3D3" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#a"></use>
    <g fill="#121A28" mask="url(#b)">
      <path d="M0 24h24V0H0z"></path>
    </g>
  </g>
</svg>

Второй значок:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="50" viewBox="0 0 120 50">
  <defs>
    <path id="a" d="M95.448 0c-6.967 0-13.25 2.905-17.717 7.567C73.262 2.905 66.979 0 60.01 0c-6.974 0-13.263 2.912-17.73 7.578C37.81 2.912 31.523 0 24.548 0 10.992 0 0 10.989 0 24.546c0 13.557 10.992 24.548 24.548 24.548 6.975 0 13.263-2.91 17.732-7.579 4.467 4.668 10.756 7.579 17.73 7.579 6.969 0 13.252-2.908 17.72-7.568 4.469 4.66 10.751 7.568 17.718 7.568 13.56 0 24.552-10.99 24.552-24.548C120 10.989 109.008 0 95.448 0M37.533 19.734l-9.664 14.84a3.968 3.968 0 0 1-3.327 1.8 3.967 3.967 0 0 1-3.33-1.8l-9.661-14.84a3.937 3.937 0 0 1 1.17-5.462 3.971 3.971 0 0 1 5.484 1.167l6.337 9.728 6.332-9.728a3.974 3.974 0 0 1 5.485-1.167 3.94 3.94 0 0 1 1.174 5.462m22.465 15.7c-6.018 0-10.898-4.878-10.898-10.898 0-6.018 4.88-10.899 10.898-10.899 6.021 0 10.903 4.88 10.903 10.9 0 6.02-4.88 10.897-10.903 10.897m35.438 0c-6.018 0-10.898-4.878-10.898-10.898 0-6.018 4.88-10.899 10.898-10.899 6.021 0 10.902 4.88 10.902 10.9 0 6.02-4.88 10.897-10.902 10.897"></path>
  </defs>
  <g fill="none" fill-rule="evenodd">
    <mask id="b" fill="#fff">
      <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#a"></use>
    </mask>
    <use fill="#FEFEFE" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#a"></use>
    <g fill="#D4107A" mask="url(#b)">
      <path d="M0 0h120v50H0z"></path>
    </g>
  </g>
</svg>

1 Ответ

0 голосов
/ 09 мая 2018

Если вы преобразуете SVG в файл .jsx и измените атрибуты таким образом, чтобы он был удобен для .jsx, он отобразит SVG, как если бы это был файл .svg.

import * as React from 'react';

const svg = (
    <div>
        <svg 
            width="120" 
            height="50" 
            viewBox="0 0 120 50"
        >
            <defs>
                <path 
                    id="a" 
                    d="M95.448 0c-6.967 0-13.25 
                    2.905-17.717 7.567C73.262 2.905 66.979 0 
                    60.01 0c-6.974 0-13.263 2.912-17.73 7.578C37.81 
                    2.912 31.523 0 24.548 0 10.992 0 0 10.989 0 24.546c0 
                    13.557 10.992 24.548 24.548 24.548 6.975 0 13.263-2.91 
                    17.732-7.579 4.467 4.668 10.756 7.579 17.73 7.579 6.969 
                    0 13.252-2.908 17.72-7.568 4.469 4.66 10.751 7.568 17.718 
                    7.568 13.56 0 24.552-10.99 24.552-24.548C120 10.989 109.008 
                    0 95.448 0M37.533 19.734l-9.664 14.84a3.968 3.968 0 0 1-3.327 
                    1.8 3.967 3.967 0 0 1-3.33-1.8l-9.661-14.84a3.937 3.937 0 0 1 
                    1.17-5.462 3.971 3.971 0 0 1 5.484 1.167l6.337 
                    9.728 6.332-9.728a3.974 3.974 0 0 1 5.485-1.167 3.94 3.94 0 
                    0 1 1.174 5.462m22.465 15.7c-6.018 0-10.898-4.878-10.898-10.898 
                    0-6.018 4.88-10.899 10.898-10.899 6.021 0 10.903 4.88 10.903 
                    10.9 0 6.02-4.88 10.897-10.903 10.897m35.438 0c-6.018 
                    0-10.898-4.878-10.898-10.898 0-6.018 4.88-10.899 10.898-10.899 
                    6.021 0 10.902 4.88 10.902 10.9 0 6.02-4.88 10.897-10.902 10.897"
                />
            </defs>
            <g fill="none" fillRule="evenodd">
                <mask id="b" fill="#fff">
                    <use xmlns="http://www.w3.org/1999/xlink" xlinkHref="#a"/>
                </mask>
                <use fill="#FEFEFE"/>
                <g fill="#D4107A" mask="url(#b)">
                    <path d="M0 0h120v50H0z"/>
                </g>
            </g >
        </svg >
    </div>
);

enter image description here

Извините за синий фон. Это цвет фона, который у меня есть в моей тестовой среде разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...