【问题标题】:FontAwesomeIcon "defined but never used" even though it is requiredFontAwesomeIcon “已定义但从未使用”,即使它是必需的
【发布时间】: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
  • 起初我认为&lt;FontAwesomeIcon /&gt; 会在任何地方定义,因为它是在&lt;Sidebar /&gt; 中导入的,而&lt;Sidebar /&gt; 在每个页面上。显然我错了,除非我在每个页面上明确包含 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome',否则图标不会显示在任何页面上。
  • 但是当我在每个页面上包含 import 时,编译器会警告我 'FontAwesomeIcon' is defined but never used 大约无数次(在每个页面上一次,它的正文中不包含 &lt;FontAwesomeIcon /&gt;,即使它包含在&lt;Sidebar /&gt;) 我明白为什么会这样说,但如果我删除导入,图标不会呈现在该页面的侧边栏中。

这两件事似乎相互矛盾。我错过了什么吗?有没有更好的方法来做到这一点?

【问题讨论】:

  • 您只需要在需要使用FontAwersomeIcon关键字的文件上导入。
  • 如果你不使用它,你不必导入FontAwesomeIcon。将import 语句添加到Sidebar 组件的文件中,并从所有其他不使用FontAwesomeIcon 的文件中删除import 语句,它应该可以工作。
  • 展示侧边栏的代码
  • 我也是这么想的!那么为什么我的项目中没有这种情况呢?我的&lt;Sidebar /&gt; 组件导入FontAwesomeIconlibrary 和所有单个图标,加上 library.add() 所有单个图标,如 FontAwesome 的 React 页面上指定的那样。但是,侧边栏中的图标实际上不会呈现在任何页面上,除非我在该页面上还包含import { FontAwesomeIcon},否则侧边栏图标将呈现在该页面上。
  • 使用 &lt;FontAwesomeIcon&gt;的代码在哪里?导入一些你在代码中实际上并没有使用的东西应该而且很明显被标记为无用的导入(因为在 React 中,你不依赖副作用。理想情况下,没有任何东西加载一个资产,然后神奇地全局可用. 如果一个组件需要某些东西,它需要导入它。然后智能资产分配将确保您不会多次加载某些内容,而是使用之前缓存的加载)

标签: reactjs font-awesome


【解决方案1】:

导入时

 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'

你需要打电话

  <FontAwesomeIcon />

您收到该消息的原因是您只是在导入它,但您从未调用它。按照我上面的建议去做

【讨论】:

  • &lt;FontAwesomeIcon /&gt; 在我的侧边栏组件中被多次调用。
【解决方案2】:

这是 Font Awesome v5.15 https://fontawesome.com/v5.15/how-to-use/on-the-web/using-with/react的官方文档

它说您需要在 App.js 中包含以下代码(不一定,但是如果您想在很多文件中使用字体真棒图标,那么制作是个好主意全球)

import { library } from "@fortawesome/fontawesome-svg-core";
import { fab } from "@fortawesome/free-brands-svg-icons";   // To use branded icons such as Google, Github, etc.
import {
    faCheckSquare,
    faCoffee,
    faInfoCircle,
    // All other icons (except fab) that you want to use MUST be declared here 
} from "@fortawesome/free-solid-svg-icons";

library.add(fab, faCheckSquare, faCoffee, faInfoCircle);    // All icons imported must be added to the library

然后在每个文件中你想使用 Font Awesome图标,你必须包含

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";

然后要使用 Font Awesome 图标,您需要执行以下操作:

<FontAwesomeIcon icon={[iconType, icon]} />

其中 iconType = 'fab'、'fas' 等

and icon = 'github'、'coffee'等

<FontAwesomeIcon icon={['fab', 'google']} />
<FontAwesomeIcon icon={['fas', 'coffee']} />

【讨论】:

  • 嗨 BeruboIV!是的,这一切都是正确的。但它并没有以任何方式回答(甚至引用)我的问题。如果您认为我的代码违反了本文档中的任何内容,请说出来并解释原因。谢谢!
最近更新 更多