嘿,我正在尝试将自己的svg导入antd->图标组件 就像在documentation中一样,但是我有例外
InvalidCharacterError:无法在执行'createElement' '文档':提供的标签名称 ('/static/media/archive-solid.3c305173.svg')无效。
我正在使用create react app 2.1.1和antd版本3.10.3 我不想执行创建反应应用程序弹出并且无法访问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>
);
}
}
答案 0 :(得分:1)
import Icon from '@ant-design/icons';
import { ReactComponent as USAFlagIcon } from "./usa-flag.svg";
const USFlag = () => <Icon component={USAFlagIcon} />
还要更改自定义图标的颜色,您需要删除SVG属性。 (我正在使用svgo .. * how to us it? * config file)
答案 1 :(得分:0)
简化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} />
请创建一支电子笔以获得更多帮助。
答案 2 :(得分:0)
您需要在webpack.config.js
中添加以下几行,以便将SVG作为组件直接导入。
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
use: [
{
loader: 'babel-loader',
},
{
loader: '@svgr/webpack',
options: {
babel: false,
icon: true,
},
},
],
}
答案 3 :(得分:0)
这种方法对我有用
import ArchiveSVG from "../../../img/icons/archive-solid.svg";
const archive = () => (
<img src={ArchiveSVG} />
);
然后像这样使用
<Icon component={archive} />
快乐编码:-)