์๊ณ์ ๊ฐ์ ๊ฐ๋จํ ๊ธฐ๋ฅ์ ์์คํฌ(Expo)์์๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
๊ทธ๋ผ ์ง๊ธ๋ถํฐ, Expo๋ฅผ ์ด์ฉํด์ ์๊ณ ๊ธฐ๋ฅ์ ๋ง๋ค์ด ์ฑ์์ ๋๋ ค๋ณด๊ธฐ ๊น์ง ํจ๊ป ์์ํด๋ณด์!
์ฝ๋ ๊ตฌ์
ํ์ฌ ์๊ฐ์ 1์ด๋ง๋ค ์๋ก์ ์ฅํด์ ํ๋ฉด์ ๋ฐ์ํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๊ฐ์ ์ ์ฅํ๋ ๊ฐ์ useState๋ฅผ ํตํด ์ ์ฅํด์ค ๊ฒ์ด๋ค.
1์ด๋ง๋ค ์๊ฐ์ ์๋ก ์ ์ฅํด ์ค ๋๋ setInterval() ํจ์๋ฅผ ์ด์ฉํด์ ๋ง๋ค์ด์ค ๊ฒ์ด๋ค. ์ด ๋, ๋งค ์ด ๋์ํ๋ setInterval() ํจ์๋ฅผ ๋งค ์ด ์ฌ๋๋๋งํ์ฌ ํธ์ถํ๋ ์ฑ๋ฅ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ useEffect๋ฅผ ์ฌ์ฉํด์ setInterval๊ณผ clearInterval์ ๋ฃ์ด์ค ๊ฒ์ด๋ค.
ํฐํธ๋ฅผ ์ค์ ํ์ฌ ๋ฃ์ด์ค ๊ฒ์ด๋ค. ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ๊ทธ ์ค์์๋ expo-font์์ ์ ๊ณตํ๋ useFonts ๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ณผ ๊ฒ์ด๋ค.
์ฝ๋
import React, {useEffect, useState} from 'react';
import { Text, SafeAreaView, StyleSheet, useColorScheme, View } from 'react-native';
import { useFonts } from 'expo-font';
const App = () => {
const [loaded] = useFonts({
Mono: require('./assets/fonts/MajorMonoDisplay-Regular.ttf'),
});
const [time,setTime]=useState(new Date());
useEffect(()=>{
const id=setInterval(()=>{
setTime(new Date());
},1000);
return ()=>clearInterval(id)
},[])
return (
<SafeAreaView style={styles.safeAreaView}>
<Text style={[styles.digitFont, styles.time]}>
{time.toLocaleTimeString('en-US')}
</Text>
</SafeAreaView>
)
};
const styles = StyleSheet.create({
safeAreaView:{flex:1, alignItems:'center', justifyContent:'center'},
digitFont:{fontWeight:'400', fontFamily:'Mono'},
time:{fontSize:50}
});
export default App;
์ฝ๋๋ ๋ด๊ฐ ๊ณต๋ถ์ค์ธ ์ฑ Do it! ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ์ฑ ํ๋ก๊ทธ๋๋ฐ๊ณผ Expo Document์ Font ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์๋ค.
๊ฒฐ๊ณผ
์์คํฌ ์ฑ์์ ์ํํ ๋ชจ์ต์ด๋ค.
์์คํฌ ์น์์ ์ฝ๋๋ฅผ ํธ์งํ๊ณ ์ ๋ฎฌ๋ ์ดํฐ๋ก ์ํํ ๋ชจ์ต์ด๋ค.
ํฐํธ๋ ์ง๊ธ MajorMonoDisplay-Regular.ttf ๋ก ์ค์ ๋์ด์๋๋ฐ, ๋ชจ๋ฐ์ผ ์ฑ์์๋ ์ ์ ์ฉ์ด ๋๋ค.
๊ทธ๋ฌ๋ ์๋ ํฐํธ(AmaticSC-Regular) ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ฐ์ผ์์ ์ ์ฉ์ด ์๋๋ค.
์ ์ฉ๋๋ ํฐํธ๋ฅผ ๋ฐ๋ก ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์์ง ์ฐพ์๋ด์ผ๊ฒ ๋ค.
์์คํฌ ์ฌ์ฉ๋ฒ์ ์ด์ ๊ธ(https://iworldt.tistory.com/52) ์ ์ฐธ๊ณ ํ์!
๋ฆฌ์กํธ๋ค์ดํฐ๋ธ , ๋ฆฌ์กํธ , React , ReactNative , React Native , ์๊ณ ๋ง๋ค๊ธฐ , setInterval , useState , useEffect , React Hooks , ๋ฆฌ์กํธ ํ
๋๊ธ