【发布时间】:2025-12-10 04:50:01
【问题描述】:
我最近将 FontAwesomeReact 添加到我的 React 站点。我正在使用显示在每个页面上的侧边栏组件中的图标。
页面:
import React from 'react'
import Header from '../components/header'
import Sidebar from '../components/sidebar'
import Layout from '../components/layout'
import Footer from '../components/footer'
class IndexPage extends React.Component {
render() {
return (
<Header />
<Sidebar />
<Layout>
<p>Hello there is some content here </p>
</Layout>
<Footer />
)
}
}
侧边栏组件:
import React from 'react'
import Menucard from '../components/menucard'
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faInfoCircle, /*...*/, faCheck} from '@fortawesome/free-solid-svg-icons'
library.add(faInfoCircle,/*...*/,faCheck)
const clubAdminMenu = (
<div>
<h2>Club Admin</h2>
<ul>
<li className="pod">
<a href="..."><FontAwesomeIcon icon="user" pull="right" /> Manage Registrations</a>
</li>
<li className="pod">
<a href="..."><FontAwesomeIcon ... /> ...<a>
</li>
...
</ul>
</div>
)
class Sidebar extends React.Component {
render() {
return (
<div className="Sidebar">
<Menucard content={clubAdminMenu} />
...
</div>
)
}
}
export default Sidebar
- 起初我认为
<FontAwesomeIcon />会在任何地方定义,因为它是在<Sidebar />中导入的,而<Sidebar />在每个页面上。显然我错了,除非我在每个页面上明确包含import { FontAwesomeIcon } from '@fortawesome/react-fontawesome',否则图标不会显示在任何页面上。 - 但是当我在每个页面上包含
import时,编译器会警告我'FontAwesomeIcon' is defined but never used大约无数次(在每个页面上一次,它的正文中不包含<FontAwesomeIcon />,即使它包含在<Sidebar />) 我明白为什么会这样说,但如果我删除导入,图标不会呈现在该页面的侧边栏中。
这两件事似乎相互矛盾。我错过了什么吗?有没有更好的方法来做到这一点?
【问题讨论】:
-
您只需要在需要使用
FontAwersomeIcon关键字的文件上导入。 -
如果你不使用它,你不必导入
FontAwesomeIcon。将import语句添加到Sidebar组件的文件中,并从所有其他不使用FontAwesomeIcon的文件中删除import语句,它应该可以工作。 -
展示侧边栏的代码
-
我也是这么想的!那么为什么我的项目中没有这种情况呢?我的
<Sidebar />组件导入FontAwesomeIcon、library和所有单个图标,加上 library.add() 所有单个图标,如 FontAwesome 的 React 页面上指定的那样。但是,侧边栏中的图标实际上不会呈现在任何页面上,除非我在该页面上还包含import { FontAwesomeIcon},否则侧边栏图标将呈现在该页面上。 -
使用
<FontAwesomeIcon>的代码在哪里?导入一些你在代码中实际上并没有使用的东西应该而且很明显被标记为无用的导入(因为在 React 中,你不依赖副作用。理想情况下,没有任何东西加载一个资产,然后神奇地全局可用. 如果一个组件需要某些东西,它需要导入它。然后智能资产分配将确保您不会多次加载某些内容,而是使用之前缓存的加载)
标签: reactjs font-awesome