[RN] ๐Ÿชถ์ปค์Šคํ…€ Icon Font ์‚ฌ์šฉ๋ฒ• (expo)

TATAยท2023๋…„ 9์›” 6์ผ
0

React-Native

๋ชฉ๋ก ๋ณด๊ธฐ
7/7

โ–ท ์ปค์Šคํ…€ Icon Font ์‚ฌ์šฉ๋ฒ• (expo)

๐Ÿชถ Icomoon์—์„œ svg๋ฅผ icon ํฐํŠธ๋กœ ๋ฐ”๊พธ๊ธฐ

SVG ์ด๋ฏธ์ง€๋ฅผ Icon Font๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์‚ฌ์ดํŠธ
โ†’ https://icomoon.io/app/#/select

SVG ์ด๋ฏธ์ง€๋ฅผ Icon Font๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
โ†’ SVG๋ฅผ Icon Font๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•(์›น)

icomoon์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„์ด์ฝ˜์„ ์ƒ์„ฑํ•œ ํ›„ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์ „์—
์„ค์ •์—์„œ CSS Selector๋ฅผ 'Use a class'๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ ์ค‘์—์„œ icomoon.ttf์™€ selection.json ํŒŒ์ผ๋งŒ ํ•„์š”ํ•˜๋‹ค.
์ด ํŒŒ์ผ๋“ค์„ ์•„๋ž˜ ๊ฒฝ๋กœ๋กœ ์ €์žฅํ•ด ์ฃผ์—ˆ๋‹ค.

src/assets/fonts/icomoon.ttf
src/assets/selection.json


๐Ÿชถ Icon Font ํฐํŠธ ์ ์šฉํ•˜๊ธฐ

react-native-vector-icons ์„ค์น˜

# ์„ค์น˜
npm install --save react-native-vector-icons
npm install --save-dev @types/react-native-vector-icons

icomoon.ttf๋ฅผ ํฐํŠธ๋กœ ์ง€์ •

App.tsx

/* App.tsx */
useEffect(() => {
  async function loadFonts() {
    await Font.loadAsync({
      customIcons: require('./src/assets/fonts/icomoon.ttf'), // โญ๏ธํฐํŠธ ์ง€์ •
    });
    setFontsLoaded(true);
  }

  loadFonts();
}, []);

if (!fontsLoaded) {
  return null; // ํฐํŠธ ๋กœ๋”ฉ ์ค‘์—๋Š” ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€
}

src/components/Icon/Icon.tsx

createIconSetFromIcoMoon(selection.json, icomoon.ttfํฐํŠธ)

/* src/components/Icon/Icon.tsx */
import icoMoonConfig from '../../assets/selection.json';
import { createIconSetFromIcoMoon } from 'react-native-vector-icons';

const Icon = createIconSetFromIcoMoon(icoMoonConfig, 'customIcons');

export default Icon;

์ด์ œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ปค์Šคํ…€ ์•„์ด์ฝ˜ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
<Icon name="์•„์ด์ฝ˜ํฐํŠธ์ด๋ฆ„" size={30} color="blue" />

import Icon from './src/components/Icon/Icon';

<Icon name="moon" size={30} />



๐Ÿ‘‰ Custom icon fonts with React Native

profile
๐Ÿพ

0๊ฐœ์˜ ๋Œ“๊ธ€