คู่มือฉบับสมบูรณ์: การใช้งาน Font Awesome ใน React (พร้อม Workshop)

อัปเดตล่าสุด: 2026-01-27 | สำหรับผู้มีความรู้พื้นฐาน React

Font Awesome คืออะไร และทำไมต้องใช้ใน React?

Font Awesome คือชุดเครื่องมือที่รวบรวมไอคอนและโลโก้โซเชียลมีเดียจำนวนมากไว้สำหรับนักพัฒนาเว็บไซต์ ตามที่ DigitalOcean อธิบาย การใช้ไอคอนช่วยให้ผู้ใช้เข้าใจฟังก์ชันต่างๆ ของเว็บไซต์ได้ทันที เช่น ไอคอนรูปแว่นขยายที่สื่อถึงการค้นหา หรือไอคอนรูปถังขยะที่สื่อถึงการลบข้อมูล

สำหรับนักพัฒนา React การนำ Font Awesome มาใช้จะง่ายและมีประสิทธิภาพสูงสุดผ่าน Official React Component ที่ชื่อว่า @fortawesome/react-fontawesome ซึ่งทาง Font Awesome แนะนำอย่างเป็นทางการ คอมโพเนนต์นี้ช่วยให้เราสามารถนำเข้าและใช้งานไอคอนในรูปแบบของ SVG ซึ่งมีข้อดีกว่าวิธีดั้งเดิม (เช่น Web Fonts) หลายประการ โดยเฉพาะอย่างยิ่งคือการรองรับ Tree-shaking ที่จะช่วยลดขนาดของแอปพลิเคชันลงได้อย่างมาก โดยจะรวมเฉพาะไอคอนที่เราใช้งานจริงเข้าไปในโปรเจกต์เท่านั้น

ขั้นตอนการติดตั้ง Font Awesome ในโปรเจกต์ React

การติดตั้งเพื่อใช้งาน Font Awesome กับ React นั้นมีขั้นตอนที่ชัดเจนและตรงไปตรงมา โดยเราจะติดตั้งแพ็กเกจที่จำเป็นทั้งหมดผ่าน npm (หรือ yarn) ตามคำแนะนำจากเอกสารทางการ

ขั้นตอนที่ 1: ติดตั้ง React Component หลัก

สิ่งแรกที่ต้องทำคือการติดตั้งคอมโพเนนต์ react-fontawesome ซึ่งเป็นหัวใจหลักในการแสดงผลไอคอนในแอปพลิเคชัน React ของเรา

npm i --save @fortawesome/react-fontawesome@latest

หรือหากใช้ yarn: yarn add @fortawesome/react-fontawesome@latest

ขั้นตอนที่ 2: ติดตั้ง SVG Core

ถัดมาคือการติดตั้ง fontawesome-svg-core ซึ่งเป็นแพ็กเกจแกนกลางที่รวบรวมฟังก์ชันและเครื่องมือต่างๆ ที่จำเป็นเพื่อให้ไอคอนสามารถทำงานได้อย่างถูกต้อง

npm i --save @fortawesome/fontawesome-svg-core

หรือหากใช้ yarn: yarn add @fortawesome/fontawesome-svg-core

ขั้นตอนที่ 3: ติดตั้งชุดไอคอน (Icon Packages)

Font Awesome แบ่งไอคอนออกเป็นสไตล์ต่างๆ และแยกเป็นแพ็กเกจย่อยๆ สำหรับคู่มือนี้ เราจะเน้นไปที่ชุดไอคอนฟรี (Free Icon Packages) ซึ่งครอบคลุมการใช้งานส่วนใหญ่ได้เป็นอย่างดี โดยชุดไอคอนฟรีที่นิยมใช้มี 3 ชุดหลัก

คุณสามารถติดตั้งทั้งหมดได้ด้วยคำสั่งต่อไปนี้:

npm i --save @fortawesome/free-solid-svg-icons @fortawesome/free-regular-svg-icons @fortawesome/free-brands-svg-icons

หรือหากใช้ yarn: yarn add @fortawesome/free-solid-svg-icons @fortawesome/free-regular-svg-icons @fortawesome/free-brands-svg-icons

เมื่อติดตั้งครบทั้ง 3 ขั้นตอนแล้ว โปรเจกต์ของคุณก็พร้อมที่จะเริ่มใช้งานไอคอนจาก Font Awesome ได้ทันที

วิธีการเรียกใช้ไอคอน: 2 วิธีหลักพร้อมข้อดี-ข้อเสีย

การนำไอคอนมาแสดงผลในคอมโพเนนต์ React สามารถทำได้หลายวิธี แต่วิธีที่แนะนำและมีประสิทธิภาพสูงสุดมี 2 วิธีหลัก ตามที่ระบุในเอกสารของ Font Awesome ซึ่งแต่ละวิธีก็มีข้อดีและข้อเสียแตกต่างกันไป

วิธีที่ 1: Import ไอคอนทีละตัว (Individual Import) - แนะนำเพื่อประสิทธิภาพสูงสุด

วิธีนี้เป็นวิธีที่แนะนำมากที่สุด เนื่องจากจะใช้ประโยชน์จาก Tree-shaking ได้อย่างเต็มที่ หมายความว่าขนาดไฟล์สุดท้ายของแอปพลิเคชัน (Bundle size) จะเพิ่มขึ้นตามจำนวนไอคอนที่เรา import มาใช้งานจริงๆ เท่านั้น ทำให้แอปพลิเคชันมีขนาดเล็กและโหลดได้รวดเร็ว DigitalOcean ก็ได้เน้นย้ำถึงข้อดีนี้

ตัวอย่างการใช้งาน:

import React from 'react';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faCoffee, faCheckSquare } from '@fortawesome/free-solid-svg-icons';
import { faGithub } from '@fortawesome/free-brands-svg-icons';

function MyComponent() {
  return (
    <div>
      <h3>My Awesome Component</h3>
      <p>
        Let's have some <FontAwesomeIcon icon={faCoffee} />!
      </p>
      <p>
        Task completed: <FontAwesomeIcon icon={faCheckSquare} />
      </p>
      <p>
        Find me on <FontAwesomeIcon icon={faGithub} />
      </p>
    </div>
  );
}

export default MyComponent;

วิธีที่ 2: สร้าง Library ส่วนกลาง (Building a Library) - สะดวกเมื่อใช้ไอคอนซ้ำๆ

หากโปรเจกต์ของคุณมีการใช้ไอคอนชุดเดิมซ้ำๆ ในหลายๆ คอมโพเนนต์ การสร้าง Library จะช่วยให้จัดการได้ง่ายขึ้น โดยเราจะ import ไอคอนทั้งหมดที่ต้องการใช้ไว้ในไฟล์เดียว แล้วเรียกใช้ไฟล์นั้นในจุดเริ่มต้นของแอป (เช่น index.js หรือ App.js) เพียงครั้งเดียว จากนั้นเราสามารถเรียกใช้ไอคอนได้จากทุกที่โดยใช้ชื่อไอคอนในรูปแบบ string

ขั้นตอนการสร้าง Library:

  1. สร้างไฟล์ใหม่ เช่น src/fontawesome.js
  2. Import library และไอคอนที่ต้องการ
  3. เพิ่มไอคอนเข้าไปใน library ด้วย library.add()

ตัวอย่างไฟล์ src/fontawesome.js:

import { library } from '@fortawesome/fontawesome-svg-core';
import { faCoffee, faCheckSquare, faTrash } from '@fortawesome/free-solid-svg-icons';
import { faGithub, faReact } from '@fortawesome/free-brands-svg-icons';

// เพิ่มไอคอนเข้าไปใน library ทำให้สามารถเรียกใช้ได้ทั่วทั้งโปรเจกต์
library.add(faCoffee, faCheckSquare, faTrash, faGithub, faReact);

จากนั้น import ไฟล์นี้ใน src/index.js:

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import './fontawesome'; // <-- Import library ที่เราสร้างขึ้น

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

ตัวอย่างการเรียกใช้ในคอมโพเนนต์:

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

function AnotherComponent() {
  return (
    <div>
      {/* เรียกใช้ด้วย string */}
      <FontAwesomeIcon icon="trash" />

      {/* เรียกใช้ด้วย array [prefix, iconName] */}
      <FontAwesomeIcon icon={['fas', 'coffee']} />
      <FontAwesomeIcon icon={['fab', 'react']} />
    </div>
  );
}

คำอธิบาย Prefix: fas (Solid), far (Regular), fal (Light), fab (Brands) คือตัวย่อสำหรับสไตล์ของไอคอน ซึ่งจำเป็นเมื่อเรียกใช้ไอคอนด้วย array

ตารางเปรียบเทียบวิธีการ Import

คุณสมบัติ วิธีที่ 1: Import ทีละตัว วิธีที่ 2: สร้าง Library
ประสิทธิภาพ (Bundle Size) ดีเยี่ยม (รองรับ Tree-shaking) ดี (ยังคงรองรับ Tree-shaking)
ความสะดวกในการใช้งาน ต้อง import ทุกครั้งที่ใช้ในไฟล์ใหม่ สะดวกมากเมื่อใช้ไอคอนซ้ำๆ ทั่วทั้งแอป
การจัดการโค้ด เห็นที่มาของไอคอนชัดเจนในแต่ละไฟล์ รวมศูนย์การจัดการไอคอนไว้ที่เดียว
กรณีที่เหมาะสม โปรเจกต์ส่วนใหญ่, โปรเจกต์ที่เน้นประสิทธิภาพสูงสุด โปรเจกต์ขนาดใหญ่ที่มีการใช้ไอคอนชุดเดิมซ้ำๆ

ผลกระทบต่อขนาด Bundle: ทำไม Tree-shaking ถึงสำคัญ?

หนึ่งในข้อผิดพลาดที่พบบ่อยคือการ import ไอคอนทั้งแพ็กเกจเข้ามาในโปรเจกต์ ซึ่งจะทำให้ขนาดของแอปพลิเคชันใหญ่ขึ้นโดยไม่จำเป็น การ import ทั้งแพ็กเกจ เช่น import { fas } from '@fortawesome/free-solid-svg-icons' จะทำให้ไอคอนทั้งหมดในชุดนั้นถูกรวมเข้ามาใน bundle ซึ่งอาจเพิ่มขนาดได้หลายร้อยกิโลไบต์

แผนภูมิด้านล่างแสดงการเปรียบเทียบขนาด Bundle โดยประมาณระหว่างวิธีการ import แบบต่างๆ เพื่อให้เห็นภาพความสำคัญของการเลือกใช้วิธีที่ถูกต้อง

จากแผนภูมิจะเห็นได้ว่าการ import เฉพาะไอคอนที่ใช้ (Individual Import) แทบไม่ส่งผลกระทบต่อขนาด Bundle ในขณะที่การ import ทั้งแพ็กเกจทำให้ขนาดเพิ่มขึ้นอย่างมหาศาล ดังนั้น ควรหลีกเลี่ยงการ import ทั้งแพ็กเกจเสมอ

การปรับแต่งสไตล์ไอคอน (Styling Icons)

@fortawesome/react-fontawesome มาพร้อมกับ props มากมายที่ช่วยให้เราปรับแต่งสไตล์ของไอคอนได้อย่างง่ายดาย ซึ่งเป็นวิธีที่สะดวกกว่าการเขียน CSS เองในหลายๆ กรณี

Workshop: สร้าง To-Do List Item Component

มาลองนำความรู้ทั้งหมดมาสร้างคอมโพเนนต์ TodoItem ง่ายๆ ที่ประกอบด้วยข้อความ, ไอคอนสำหรับติ๊ก (checkbox) และไอคอนสำหรับลบ (trash) กัน

ขั้นตอนที่ 1: เตรียมโปรเจกต์และติดตั้งแพ็กเกจ

ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแพ็กเกจทั้งหมดตามที่อธิบายไว้ในส่วน "ขั้นตอนการติดตั้ง" เรียบร้อยแล้ว

ขั้นตอนที่ 2: สร้างคอมโพเนนต์ TodoItem

สร้างไฟล์ใหม่ src/components/TodoItem.js และใส่โค้ดต่อไปนี้:

import React, { useState } from 'react';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faSquare, faCheckSquare, faTrash } from '@fortawesome/free-solid-svg-icons';

// สร้าง CSS-in-JS เพื่อความสะดวก
const styles = {
  container: {
    display: 'flex',
    alignItems: 'center',
    padding: '10px',
    borderBottom: '1px solid #eee',
    fontSize: '1.2rem',
  },
  icon: {
    marginRight: '15px',
    cursor: 'pointer',
    color: '#4a5568',
  },
  trashIcon: {
    marginLeft: 'auto',
    cursor: 'pointer',
    color: '#a0aec0',
  },
  completedText: {
    textDecoration: 'line-through',
    color: '#a0aec0',
  }
};

function TodoItem({ text }) {
  const [isCompleted, setIsCompleted] = useState(false);

  const toggleComplete = () => {
    setIsCompleted(!isCompleted);
  };

  return (
    <div style={styles.container}>
      <FontAwesomeIcon
        icon={isCompleted ? faCheckSquare : faSquare}
        style={styles.icon}
        onClick={toggleComplete}
        size="lg"
      />
      <span style={isCompleted ? styles.completedText : {}}>
        {text}
      </span>
      <FontAwesomeIcon
        icon={faTrash}
        style={styles.trashIcon}
        title="Delete"
        onMouseOver={(e) => e.currentTarget.style.color = '#e53e3e'}
        onMouseOut={(e) => e.currentTarget.style.color = '#a0aec0'}
      />
    </div>
  );
}

export default TodoItem;

ขั้นตอนที่ 3: นำ TodoItem ไปใช้งานใน App.js

แก้ไขไฟล์ src/App.js เพื่อแสดงรายการ To-Do ของเรา:

import React from 'react';
import TodoItem from './components/TodoItem';

function App() {
  const todos = [
    'เรียนรู้การใช้ Font Awesome ใน React',
    'สร้าง Workshop ที่ใช้งานได้จริง',
    'ดื่มกาแฟ',
  ];

  return (
    <div style={{ maxWidth: '500px', margin: '50px auto', border: '1px solid #ddd', borderRadius: '8px' }}>
      <h2 style={{ padding: '15px', borderBottom: '1px solid #ddd', margin: 0 }}>My To-Do List</h2>
      {todos.map((todo, index) => (
        <TodoItem key={index} text={todo} />
      ))}
    </div>
  );
}

export default App;

เมื่อรันโปรเจกต์ (npm start) คุณจะเห็น To-Do List ที่มีไอคอนสวยงามและสามารถโต้ตอบได้ ซึ่งเป็นการนำความสามารถของ @fortawesome/react-fontawesome มาใช้ได้อย่างเต็มประสิทธิภาพ

สรุป

การผสาน Font Awesome เข้ากับ React ด้วยไลบรารี @fortawesome/react-fontawesome เป็นวิธีที่ทันสมัยและมีประสิทธิภาพสูง ช่วยให้นักพัฒนาสามารถเพิ่มไอคอนคุณภาพสูงลงในแอปพลิเคชันได้อย่างง่ายดาย

ประเด็นสำคัญที่ควรจำ:

ด้วยความเข้าใจในหลักการเหล่านี้ คุณจะสามารถใช้งานไอคอนในโปรเจกต์ React ของคุณได้อย่างมืออาชีพและมีประสิทธิภาพสูงสุด สำหรับข้อมูลเพิ่มเติมและไอคอนทั้งหมด สามารถศึกษาได้จาก เอกสารทางการของ Font Awesome