๊ตฌ๊ธ ํฐํธ์์ ์ํ๋ ํฐํธ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ttfํ์ผ์ assets/fonts ํ์ผ ์์ ๋ฃ์ด์ค๋ค.
# ์ค์น
npm install expo-font
ํฐํธ ๋ก๋ฉ์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: Font.loadAsync({"ํฐํธ๋ช
": require("๊ฒฝ๋ก")});
ํฐํธ ๋ก๋ฉ์ ๋น๋๊ธฐ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง์ด ์์๋ ํ์๋ ํฐํธ ๋ก๋ฉ์ด ์๋ฃ๋์ง ์์ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก useEffect ํจ์๋ฅผ ์ฌ์ฉํด์ ํฐํธ ๋ก๋ฉ์ด ์๋ฃ๋๋ฉด ๋ก๋ฉ ์ํ๋ฅผ true๋ก ๋ณ๊ฒฝํด์ค์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํฐํธ ๋ก๋ฉ์ด ์๋ฃ๋ ํ์๋ง ํ ์คํธ ์คํ์ผ์ ํฐํธ๋ฅผ ์ ์ฉํ ์ ์๋ค.(์ ํด์ฃผ๋ฉด ์ค๋ฅ ๋ธ)
import * as Font from 'expo-font';
import { useEffect, useState } from 'react';
export default function App() {
const [fontsLoaded, setFontsLoaded] = useState(false);
useEffect(() => {
async function loadFonts() {
await Font.loadAsync({
bubblegum: require('./src/assets/fonts/BubblegumSans-Regular.ttf'),
notosans: require('./src/assets/fonts/NotoSansKR-VariableFont_wght.ttf'),
});
setFontsLoaded(true);
}
loadFonts();
}, []);
if (!fontsLoaded) {
return null; // ํฐํธ ๋ก๋ฉ ์ค์๋ ๋ ๋๋ง์ ๋ฐฉ์ง
}
return (
<SafeAreaView>
// ์ ์ฉ ๋ฐฉ๋ฒ
<Text style={{ fontFamily: 'notosans', fontSize: 28 }}>Font</Text>
<Text style={{ fontFamily: 'bubblegum', fontSize: 28 }}>Font</Text>
</SafeAreaView>
);
}
notosans ํฐํธ๋ฅผ ๋ชจ๋ Text์ ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ํ๋ ๋์ , ์ ์ญ์ผ๋ก ํ ๋ฒ๋ง ์ค์ ํ์ฌ ๋ชจ๋ ํ ์คํธ์ ์ผ๊ด์ ์ผ๋ก ์ ์ฉํ๊ณ ์ถ์๋ค.
๊ทธ๋ด ๋ react-native-global-props ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
# ์ค์น
npm i react-native-global-props --save
npm install --save-dev @types/react-native-global-props
setCustomText๋ก ํฐํธ๋ฅผ ์ ์ฉ
import { setCustomText } from 'react-native-global-props';
const customTextProps = {
style: {
fontFamily: 'notosans',
},
};
setCustomText(customTextProps);
์ ์ฒด ์ฝ๋
import * as Font from 'expo-font';
import { useEffect, useState } from 'react';
import { setCustomText } from 'react-native-global-props';
export default function App() {
const [fontsLoaded, setFontsLoaded] = useState(false);
useEffect(() => {
async function loadFonts() {
await Font.loadAsync({
bubblegum: require('./src/assets/fonts/BubblegumSans-Regular.ttf'),
notosans: require('./src/assets/fonts/NotoSansKR-VariableFont_wght.ttf'),
});
setFontsLoaded(true);
}
loadFonts();
}, []);
if (!fontsLoaded) {
return null; // ํฐํธ ๋ก๋ฉ ์ค์๋ ๋ ๋๋ง์ ๋ฐฉ์ง
}
const customTextProps = {
style: {
fontFamily: 'notosans',
},
};
setCustomText(customTextProps);
return (
<SafeAreaView>
<Text style={{ fontSize: 28 }}>Font</Text> // โญ๏ธfontFamily: 'notosans'๋ฅผ ํด์ฃผ์ง ์์๋ ์ ์ฉ๋จ
<Text style={{ fontFamily: 'bubblegum', fontSize: 28 }}>Font</Text>
</SafeAreaView>
);
}