如何将svg导入到antd的Icon组件中

6

嗨,我正在尝试将自己的svg导入antd ->图标组件,就像在文档中所示,但是我遇到了异常。

InvalidCharacterError:在“文档”上执行'createElement'操作失败:提供的标记名称('/ static / media / archive-solid.3c305173.svg')无效。

我正在使用create react app 2.1.1和antd版本3.10.3。我不想进行create react app eject,并且我没有访问webpack。有什么想法吗? 这是代码:

import React, { Component } from "react";
import { Layout, Menu, Icon } from "antd";
import ArchiveSVG from "../../../img/icons/archive-solid.svg";

const { Sider } = Layout;

class SideBar extends Component {
state = {
  collapsed: false
};

onCollapse = collapsed => {
  this.setState({ collapsed });
};

render() {
 return (
   <Sider
     collapsible
     collapsed={this.state.collapsed}
     onCollapse={this.onCollapse}
   >
     <div className={styles.logo} />
     <Menu theme="dark" defaultSelectedKeys={["1"]} mode="inline">
       <Menu.Item key="4">
         <Icon component={ArchiveSVG} />
         <span>Products</span>
       </Menu.Item>
     </Menu>
   </Sider>
 );
}
}

archive-solid.svg 位于哪里?在 src/ 文件夹之外吗? - Alejandro
你尝试过这种方法吗:https://dev59.com/za7la4cB1Zd3GeqPcWn8 - user3006708
4个回答

3
import Icon from '@ant-design/icons';
import { ReactComponent as USAFlagIcon } from "./usa-flag.svg";

const USFlag = () => <Icon component={USAFlagIcon} />

同样要改变自定义图标的颜色,您需要删除SVG属性。(我正在使用svgo .. *如何使用它? *配置文件)


3
这种方法对我很有效。
import ArchiveSVG from "../../../img/icons/archive-solid.svg";

const archive = () => (
   <img src={ArchiveSVG} />
);

然后像这样使用。
<Icon component={archive} />

愉快的编码 :-)


1
简化您的SVG并将其导出为JSX,如下所示。
import React from 'react';

export default () => <svg viewBox="0 0 512 512" width="1em" height="1em" fill="currentColor">
    <path fill="currentColor" d="M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z">
    </path>
</svg>

然后像这样使用


<Icon component={RepySVG} />

请创建一个 CodePen 来获取更多帮助。

0

您需要将以下代码添加到您的webpack.config.js文件中,以便直接将SVG作为组件导入。

            {
                test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
                use: [
                    {
                        loader: 'babel-loader',
                    },
                    {
                        loader: '@svgr/webpack',
                        options: {
                            babel: false,
                            icon: true,
                        },
                    },
                ],
            }

相关文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接