Reactjs 导入图标会动态地对其进行响应
我在react js项目中使用FontawesomeIcon,图标的名称来自数据库。我想从@fortawesome/free solid svg图标动态导入来自数据库的图标Reactjs 导入图标会动态地对其进行响应,reactjs,icons,font-awesome,Reactjs,Icons,Font Awesome,我在react js项目中使用FontawesomeIcon,图标的名称来自数据库。我想从@fortawesome/free solid svg图标动态导入来自数据库的图标 import React, { Component } from "react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import {faImage} from "@fortaw
import React, { Component } from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import {faImage} from "@fortawesome/free-solid-svg-icons";
export class Features extends Component {
render() {
return (
<div id="features" className="text-center">
<div className="container-fluid">
<div className="features-listing">
{this.props.data.map((item, index) => (
<div key={`${index}`}>
{" "}
<FontAwesomeIcon icon={item.icon} />
<h3>{item.title}</h3>
</div>
))}
</div>
</div>
</div>
);
}
}
export default Features;
只需将CDN添加到您的HTML标题中,并使用您想要的任何图标
在react中可能是这样的:
Object.ico应该是一个包含图标名的字符串,比如far fa xyz只需将CDN添加到HTML标题中,并使用任何您想要的图标
在react中可能是这样的:
Object.ico应该是一个包含图标名称的字符串,如App.js中的far fa xyz,您可以导入所有图标,如中所示,如下所示:
import {library} from '@fortawesome/fontawesome-svg-core';
import * as Icons from '@fortawesome/free-solid-svg-icons';
const iconList = Object.keys(Icons)
.filter((key) => key !== 'fas' && key !== 'prefix')
.map((icon) => Icons[icon]);
library.add(...iconList);
然后,在组件内部,仅导入FontAwesomeIcon并使用它们:
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
<FontAwesomeIcon icon="times" />
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
<FontAwesomeIcon icon={['fab', 'apple']} /> // any icon from Brand.
<FontAwesomeIcon icon={['fas', 'coffee']} /> // any icon from Solid.
在App.js中,您可以导入所有图标,如中所示,如下所示:
import {library} from '@fortawesome/fontawesome-svg-core';
import * as Icons from '@fortawesome/free-solid-svg-icons';
const iconList = Object.keys(Icons)
.filter((key) => key !== 'fas' && key !== 'prefix')
.map((icon) => Icons[icon]);
library.add(...iconList);
然后,在组件内部,仅导入FontAwesomeIcon并使用它们:
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
<FontAwesomeIcon icon="times" />
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
<FontAwesomeIcon icon={['fab', 'apple']} /> // any icon from Brand.
<FontAwesomeIcon icon={['fas', 'coffee']} /> // any icon from Solid.
实际上,有一种更好的方法不必迭代所有图标@Andrei Rosu的解决方案,您可以导出整个品牌和实体包:
import { library } from '@fortawesome/fontawesome-svg-core'
import { fab } from '@fortawesome/free-brands-svg-icons'
import { fas } from '@fortawesome/free-solid-svg-icons'
// This exports the whole icon packs for Brand and Solid.
library.add(fab, fas)
并使用它们:
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
<FontAwesomeIcon icon="times" />
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
<FontAwesomeIcon icon={['fab', 'apple']} /> // any icon from Brand.
<FontAwesomeIcon icon={['fas', 'coffee']} /> // any icon from Solid.
实际上,有一种更好的方法不必迭代所有图标@Andrei Rosu的解决方案,您可以导出整个品牌和实体包:
import { library } from '@fortawesome/fontawesome-svg-core'
import { fab } from '@fortawesome/free-brands-svg-icons'
import { fas } from '@fortawesome/free-solid-svg-icons'
// This exports the whole icon packs for Brand and Solid.
library.add(fab, fas)
并使用它们:
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
<FontAwesomeIcon icon="times" />
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
<FontAwesomeIcon icon={['fab', 'apple']} /> // any icon from Brand.
<FontAwesomeIcon icon={['fas', 'coffee']} /> // any icon from Solid.
但是我想使用@fortawesome/react-fontawesome软件包,我不想使用任何cdn并将其放在html中,最好在您的项目中有软件包,但我想使用@fortawesome/react-fontawesome软件包,我不想使用任何cdn并将其放在html中,最好在您的项目中有软件包谢谢您的回答,我想使用的图标名称是未知的,它们来自对数据库的请求,因此这种方式不会出现work@AmmarIsmaeel请查看我编辑的关于如何导入所有图标的帖子,虽然我不喜欢导入所有图标,这似乎是唯一的选择solution@AmmarIsmaeel动态地一个接一个地导入它们会有更大的问题,因为这个过程是异步的。如果一开始就全部导入,应该不会有问题。谢谢你的回答,我想使用的图标名称是未知的,它们来自对数据库的请求,因此这种方式不会出现问题work@AmmarIsmaeel请查看我编辑的帖子,了解如何导入所有这些iconsThx,它起作用了,虽然我不喜欢导入所有图标的想法,但这似乎是唯一的选择solution@AmmarIsmaeel动态地一个接一个地导入它们会有更大的问题,因为这个过程是异步的。如果一开始就将它们全部导入,应该不会有问题。