FRONT/리액트네이티브

react native 기본 제공 코드 분석 (App.tsx)

혀니리리 2023. 5. 5. 13:04
728x90

 

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * @format
 */

import React from 'react';
import type {PropsWithChildren} from 'react';
import {
  SafeAreaView,
  ScrollView,
  StatusBar,
  StyleSheet,
  Text,
  useColorScheme,
  View,
} from 'react-native';

import {
  Colors,
  DebugInstructions,
  Header,
  LearnMoreLinks,
  ReloadInstructions,
} from 'react-native/Libraries/NewAppScreen'; //실제 개발엔 사용되지 않는 홈화면 튜토리얼을 위한 라이브러리

type SectionProps = PropsWithChildren<{ //PropsWithChilderen:자식의 속성을 지정해 번거로움을 줄여주는 애인듯..
  title: string;
}>;

function Section({children, title}: SectionProps): JSX.Element {
  const isDarkMode = useColorScheme() === 'dark';
  return (
    <View style={styles.sectionContainer}> //아래 지정된 스타일대로 뷰를 꾸미겠다.
      <Text
        style={[
          styles.sectionTitle,
          {
            color: isDarkMode ? Colors.white : Colors.black,
          },
        ]}>
        {title} //타이틀은 이 스타일대로
      </Text>
      <Text
        style={[
          styles.sectionDescription,
          {
            color: isDarkMode ? Colors.light : Colors.dark,
          },
        ]}>
        {children} //칠드런은 이 스타일대로
      </Text>
    </View>
  );
}

function App(): JSX.Element {
  const isDarkMode = useColorScheme() === 'dark';

  const backgroundStyle = { //백그라운드 스타일은 이렇게
    backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
  };

  return (
    <SafeAreaView style={backgroundStyle}>
      <StatusBar
        barStyle={isDarkMode ? 'light-content' : 'dark-content'}
        backgroundColor={backgroundStyle.backgroundColor}
      />
      <ScrollView
        contentInsetAdjustmentBehavior="automatic" //애플 엠자탈모같은 부분에서 알아서 safearea잡아주는 역할
        style={backgroundStyle}>
        <Header/> //위에 리엑트 네이티브 로고 그려진 헤더를 의미
        <View
          style={{
            backgroundColor: isDarkMode ? Colors.black : Colors.white,
          }}>
          <Section title="Step One">//아까 위에서 설정한 section함수의 title 지정
            Edit <Text style={styles.highlight}>App.tsx</Text> to chan this
            screen and then come back to see your edits.
          </Section>
          <Section title="See Your Changes">
            <ReloadInstructions />
          </Section>
          <Section title="Debug">
            <DebugInstructions />
          </Section>
          <Section title="Learn More">
            Read the docs to discover what to do next:
          </Section>
        </View>
        <LearnMoreLinks/> //아래 링크들 의미
      </ScrollView>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  sectionContainer: {
    marginTop: 50, //위 여백
    paddingHorizontal: 30,
  },
  sectionTitle: {
    fontSize: 24, //폰트사이즈
    fontWeight: '600', //폰트 굵기
  },
  sectionDescription: {
    marginTop: 10,
    fontSize: 18,
    fontWeight: '400',
  },
  highlight: {
    fontWeight: '700',
  },
});

export default App;
728x90