๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ReactNative

[ReactNative] ๋ฆฌ์•กํŠธ ํ›…(useState, useEffect)์œผ๋กœ ์‹œ๊ณ„ ๋งŒ๋“ค๊ธฐ with Expo

by IworldT 2021. 9. 16.
๋ฐ˜์‘ํ˜•

์‹œ๊ณ„์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์€ ์—‘์Šคํฌ(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 , ๋ฆฌ์•กํŠธ ํ›…

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€