React에서 Font Awesome을 시작하려면 npm 및 yarn 같은 패키지 관리자를 사용하여 패키지를 설치해야 한다.
SVG + JS 메서드를 사용하여 아이콘을 렌더하는 방식(v.6.1.1.)
먼저 npm을 사용하여 아이콘을 작동시키는 모든 유틸리티를 포함하는 핵심 패키지
를 설치해야 한다.
`SVG + JS method`를 사용하여 아이콘을 렌더해 보자. _(v.6.1.1.)_
사용 하려는 무료
/프로
아이콘 패키지를 설치하면 된다.
Pro 아이콘의 경우 먼저 비밀 Font Awesome npm 토큰과 글로벌 또는 프로젝트별 액세스를 설정해야 한다.
# Free icons styles npm i --save @fortawesome/free-solid-svg-icons npm i --save @fortawesome/free-regular-svg-icons
# Pro icons styles npm i --save @fortawesome/pro-solid-svg-icons npm i --save @fortawesome/pro-regular-svg-icons npm i --save @fortawesome/pro-light-svg-icons npm i --save @fortawesome/pro-thin-svg-icons npm i --save @fortawesome/pro-duotone-svg-icons
폰트아썸 리액트 컴포넌트
를 설치한다.
npm i --save @fortawesome/react-fontawesome@latest
아래 처럼 각 패키지 관리자를 사용하여 필요한 모든 항목과 무료 solid 아이콘 스타일을 설치하면 된다.
npm i --save @fortawesome/fontawesome-svg-core
npm i --save @fortawesome/free-solid-svg-icons
npm i --save @fortawesome/react-fontawesome
React 프로젝트에 아이콘을 추가하는 데는 몇 가지 방법이 있다. 프로젝트에 적합한 옵션을 선택한 다음 FontAwesome을 사용하여 UI에 아이콘을 추가하면 된다.
난 지금 individually 옵션을 사용하는 중인데 아래 표의 단점에서 말하는 것 처럼 아주 귀찮다..🥲
옵션 | 이점 | 단점 |
---|---|---|
Dynamit Icon Import | 구성요소에 사용 중인 아이콘만 자동으로 포함시켜 최종 번들을 최적화한다. 즉, 사용하는 아이콘만 번들에 포함된다. | 바벨 매크로를 추가하고 구성해야 한다. |
Individually | 아이콘을 부분 집합화하여 최종 번들을 최적화할 수 있다. 즉, 가져오는 아이콘만 번들에 포함된다. | 프로젝트의 많은 컴포넌트 각각에 아이콘을 명시적으로 가져오는 작업을 해야 한다.🥲 |
Globally | 아이콘을 init 모듈에서 한 번만 개별적으로 가져오기 - 일단 아이콘을 라이브러리에 추가한 후에는 각 구성 요소로 가져올 필요가 없다. | 사용하지 않고 성능에 영향을 줄 수 있는 파일을 포함할 수도 있다. 즉, 앱이 무거워 진다. |
가장 쉬운 방법은 사용 중인 아이콘과 사용 중인 아이콘만 자동으로 가져오는 동적 아이콘 가져오기(Dynamic Icon Importing)
를 사용하는 것이다.
동적 아이콘 가져오기를 사용하면 개별 아이콘을 선언할 필요가 없으므로 아이콘을 추가하고 사용하지 않는 아이콘을 추적하는 시간을 절약할 수 있다. 이 작업은 javascripter의 babel 매크로 플러그인을 기반으로 한다.
npm install babel-plugin-macros
그런 다음 바벨 플러그인을 구성해야 한다. 아래 내용을 babel.config.js
파일에 추가하면된다.
module.exports = function (api) {
return {
plugins: ['macros'],
}
}
그런 다음 babel-plugin-macros.config.js
파일을 만들고 fontawesome-svg-core
설정을 추가하면 된다.
사용하려는 아이콘에 따라 사용권을 무료 또는 프로로 설정할 수도 있다.
module.exports = {
'fontawesome-svg-core': {
'license': 'free'
}
}
그런 다음 프로젝트에 아이콘을 표시할 위치에 아래 구문을 사용하여 아이콘을 추가할 수 있다.
다음은 솔리드 스타일
, 일반 스타일
, 브랜드 스타일
을 가져온 다음 coffee 아이콘과 user-secret 아이콘과 트위터 아이콘을 앱 UI에 추가하는 예이다.
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { solid, regular, brands } from '@fortawesome/fontawesome-svg-core/import.macro' // <-- import styles to be used
<FontAwesomeIcon icon={solid('user-secret')} />
<FontAwesomeIcon icon={regular('coffee')} />
<FontAwesomeIcon icon={brands('twitter')} />
동적 아이콘 가져오기 방법을 사용할 수 없거나 사용하지 않으려는 경우 각 컴포넌트에 개별 아이콘을 명시적으로 추가하면 된다.
import ReactDOM from 'react-dom'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faCoffee } from '@fortawesome/free-solid-svg-icons'
const element = <FontAwesomeIcon icon={faCoffee} />
ReactDOM.render(element, document.body)
(참고) faCoffee 아이콘은 @fortawesome/free-solid-svg-icons에서 객체(object)로 가져온 후 객체인 아이콘 prop으로 제공된다.
이 방법은 추천하지 않는다고 한다. 아이콘을 전역으로 가져오면 사용하지 않는 아이콘이 있는 번들의 크기가 커질 수 있기 때문이다. 또한 내 컴포넌트들을 아이콘을 관리하는 다른 모듈과 연결한다.
여튼 전역으로 아이콘을 추가하는 방법은 다음과 같다.
import ReactDOM from 'react-dom'
import { library } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { faTwitter, faFontAwesome } from '@fortawesome/free-brands-svg-icons'
library.add(fas, faTwitter, faFontAwesome)
library.add()
를 호출하면 다음과 같은 내용을 패스할 수 있다.
fas
: @for twoesome/free-solid-svg-icons에 있는 모든 아이콘을 나타낸다.
(❗️ 아이콘이 많기 때문에 전체 스타일을 가져오는 데 주의해야 한다.)
따라서 해당 패키지의 아이콘은 앱의 다른 위치에서 문자열로 아이콘 이름으로 참조될 수 있다.
예를 들어 coffee, check-square, 혹은 spinner.
faTwitter 및 faFontAsome
: 이러한 브랜드 아이콘을 개별적으로 추가하면 icon string names, twitter 및 font-awesome로 앱 전체에서 해당 아이콘을 참조할 수 있다.
그러면 각 컴포넌트로 다시 가져올 필요 없이 앱의 모든 위치에서 이러한 아이콘을 사용할 수 있다. 따라서 몇 가지 구성 요소에 아이콘을 사용하면 다음과 같이 된다.
import React from 'react'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
export const Beverage = () => (
<div>
<FontAwesomeIcon icon="fa-solid fa-check-square" />
Your <FontAwesomeIcon icon="fa-regular fa-coffee" /> is hot!
</div>
)
import React from 'react'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
export const Showcase = () => (
<div>
<FontAwesomeIcon icon="fa-brands fa-twitter" />
<FontAwesomeIcon icon="fa-brands fa-font-awesome" />
<FontAwesomeIcon icon="fa-regular fa-mug-hot" />
The coffee is ready at these companies!
</div>
)
이렇게 임포트된 브랜드 아이콘을 컴포넌트에서 명시적으로 가져오지 않고 사용할 수 있다.
또한 check-square, coffee, mug-hot 아이콘을 어디에서나 명시 적으로 가져 오지 않고 사용할 수 있다.
그러나 우리의 번들에는 이제 1000 개 이상의 solid 아이콘과 우리가 추가 한 두 개의 브랜드 아이콘이 있다.따라서 앱 전체가 무거워 진다..^^!
왠만하면 전체 스타일 가져오기 하지 말자구!