본문 바로가기
React/Native

ReactNative) ReactNative 취미 시작 (feat: Component, FlexBox)

by 후르륵짭짭 2023. 3. 1.
728x90
반응형

어느 스키장에서

안녕하세요. 후르륵짭짭입니다.

최근에는 Javascript에 취미를 가지고 싶어서 ReactNative 강의를 통해서 공부를 하고 있습니다.

앞으로 Javascript는 너무 기본적인 언어라 생각하여

지금이라도 취미를 가져 나중에 제게 도움이 될 것 같아서 앱 개발자인 저에게 좀 더 친숙 할 수 있는 

React Native로 공부를 시작하게 됐습니다.

(요즘에는 나의 노동력으로 돈을 버는게 쫌 회의적이라서 ㅠ ㅠ.)

 

** React Native 시작하기 **

- Sample 프로젝트 생성 - 

설치를 원하는 디렉토리에 가서 sudo npm install -g expo-cli를 하면

react Native에서 개발할 수 있는 환경을 제공하는 expo를 설치하게 됩니다.

그런 다음 expo init <프로젝트명>을 작성하여 Smaple 프로젝트를 시작합니다.

이제 VSCode의 터미널을 통해서 프로젝트를 시작해주면 끝 납니다.

 

** 기본적인 Component ** 

ReactNative도 iOS 처럼 간단한 UIVIew라던지 UIText 등을 제공합니다.

iOS는 UIKit 또는 SwiftUI에 다 들어가 있는데, ReactNative는 react-native에서 하나씩 가져와야합니다.

import { StyleSheet, Text, View, Button, TextInput, ScrollView, FlatList} from 'react-native';

요렇게 import {<가져올 컴포넌트>} from <모듈> 과 같은 형태로 가져오게 됩니다.

 

 - 일반적인 형태 - 

일반적으로 React와 동일한 방식입니다. 

반면 React는 DOM 형식인 <div> </div> 이런 것을 사용하지만 ReactNative는 따로 컴포넌트가 존재합니다.

function App() {
  return (
    <View style={styles.container}> 
      <View>
         <Text style={{margin: 20 , borderWidth : 3, borderColor: "red", padding: 20}}>
          Hello World
          </Text>
        <Button title='Click Me'/>
      </View>
      <Text style={styles.dummyText}>Hello World</Text>
    </View>
  );
}

 

 

위와 같이 View 컴포넌트 , Text 컴포넌트, Button 컴포넌트가 있습니다.

<View>는 iOS에서 UIView와 같은 역할을 합니다.  

이 <View>위에 각종 Component를 올려 놓는 형식 입니다. 

(즉 , Layout을 위해서 있는 것이다.)

그리고 꾸미기 위해서는 style이라는 변수에 JSON을 넣어주면 됩니다.

이때 StyleSheet라는 것이 사용 됩니다.

//이와 같이 StyleSheet안에 Property를 생성하고 Object 형태로 관리할 수 있다.
//SytleSheet를 사용하면 AutoCOmplete이 가능하다.
//그리고 기본 단위는 Pixel 이다. 참고로 padding은 내부에 element의 간격이다. margin은 외부의 간격이다.
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
  dummyText : {
    margin: 20 ,
    borderWidth : 3,
    borderColor: "blue",
    padding: 20
  }
});

이렇게 CSS와 비슷하지만 Native랑 또 짬뽕이 된 형태의 Style을 만들어 줘서 넣어주면 됩니다.

 

** FlexBox ** 

FlexBox는 ReactNative에서 ReactNative에서 View 정렬에 가장 중요한 이론이라고 한다.

기본적인 구성은 하단 View들을 아우를 수 있는 가장 최 상단 View가 있어야한다.

예를 들어서 아래 처럼 말이다.

export default function App() {
  return (
    <View style={{ padding: 50 , flexDirection: "column" , justifyContent:'space-around', alignItems:'stretch', width:"80%", height:200}}>
      <View
        style={{
          backgroundColor: 'red',
          justifyContent: 'center',
          flex:1,
          alignItems: 'center'
        }}
      >
        <Text>1</Text>
      </View>
      <View
        style={{
          backgroundColor: 'blue',
          flex:2,
          justifyContent: 'center',
          alignItems: 'center'
        }}
      >
        <Text>2</Text>
      </View>
      <View
        style={{
          backgroundColor: 'green',
          flex:1,
          justifyContent: 'center',
          alignItems: 'center'
        }}
      >
        <Text>3</Text>
      </View>
    </View>
  );
}

 

- FlexDirection -

이렇게 가장 상단 View에 flextDirection을 설정 해준다!

여기서 FlexDirection은 Row, Column이 존재하는데, View들의 배치를 의미한다.

Column(세로로 배치) : 

Row(가로로 배치) : 

둘의 차이는 딱 봐도 자식들의 배치를 의미한다.

 

 - Align Items -

이것은 자식의 정렬 배치를 설정하는 겁니다.

만약 Row라고 하면 자식들을 세로로 어떻게 정렬 배치 할거냐 입니다.

Column이라고 한다면 자식들을 가로로 어떻게 정렬 배치 할거냐 이구요.

flex-start, center, flex-end, stretch, baseline 총 5가지가 있습니다.

https://yuddomack.tistory.com/entry/5React-Native-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-%EB%94%94%EC%9E%90%EC%9D%B8-2%EB%B6%80-%EB%B0%B0%EC%B9%98Flex-Direction%EC%99%80-%EC%A0%95%EB%A0%ACjustify-content-align-items

위와 같은 경우는 row으로 되어 있어서 세로로 자식들을 정렬하는 것을 보여주는 겁니다.

 

 - JustifyContent - 

이것은 또 FlextDirection의 세부 배치 입니다.

배치가 3가지라서 헷갈리는데, 제가 이해한 방식은 배치 해야할 작업이 3가지라고 생각 했습니다.

FlexDirection이 가장 큰 틀에서의 배치

JustifyContent는 FlexDirection에 맞는 세부 배치

AlignItem은 FlexDirection과 반대방향의 가장 밑단의 배치 

라고 생각했는데,, (잘 맞을지는 ㅠㅠ)

JustifyContent는 이렇게 5가지는 제공합니다.

flex-start(default) 축의 방향대로 컴포넌트를 쌓는다.
flex-end 축의 역방향대로 컴포넌트를 쌓는다.
center 축의 가운데를 기준으로 쌓는다.
space-between 양끝정렬(양끝 공백x)
space-around 양끝정렬(양끝 공백o)

space-between은 양끝 정렬입니다.

space-around는 중간지점 정렬 입니다.

이렇게 이미지가 같은 크기 인데, space-around와 between의 차이는 존재합니다.

 

 - 하위 View에도 FlexBox 적용 - 

만약 빨강색 뷰를 FlexDirection을 Column으로 적용하고

justifyContent는 space-around alignItem을 flext-start로 하면 어떻게 될까요?

세로로 나열 될 거고 아이템은 세로에서 중간 지점에 있을 것이고 가로 배치는 맨 왼쪽이겠네요.

이렇게 하위 뷰에도 FlexBox가 적용이 가능합니다.

 

 - Flex - 

Flex는 전체 뷰에서 비율로 나눠서 해당 Flex에 맞게 공간을 마련해주는 방식입니다.

export default function App() {
  return (
    <View style={{ padding: 50 , flexDirection: "row" , justifyContent:'space-around', alignItems:'stretch', width:"80%", height:200}}>
      <View
        style={{
          backgroundColor: 'red',
          justifyContent: 'center',
          flex:1,
          alignItems: 'center'
        }}
      >
        <Text>1</Text>
      </View>
      <View
        style={{
          backgroundColor: 'blue',
          flex:2,
          justifyContent: 'center',
          alignItems: 'center'
        }}
      >
        <Text>2</Text>
      </View>
      <View
        style={{
          backgroundColor: 'green',
          flex:1,
          justifyContent: 'center',
          alignItems: 'center'
        }}
      >
        <Text>3</Text>
      </View>
    </View>
  );
}

이렇게 뷰 세개가 존재하는데 총 Flex는 1 + 2 + 1 = 4개 이므로 총 4등분으로 나눠서

빨강은 한공간 파랑은 두 공간 초록은 한 공간을 주게 됩니다.

 

** 참고 사이트  **

FlexBox의 JustifyContent 정리 : 

https://daesiker.tistory.com/19

 

9.React-Native Layout(justifyContent, alignItems)

9-1 Layout DirectionLayout Directiondms 계층 구조에서 자식요소와 텍스트가 배치되어야 하는 방향을 지정한다.레이아웃의 방향은 양끝을 나타내는 start와 end를 통해 나타내는데 기본적으로 React Native는 L

daesiker.tistory.com

 

Error opening is simulator. Check Metro logs for details. :

https://november11tech.tistory.com/184

 

[React Native] Expo 에서 iOS 시뮬레이터 실행 시 오류 발생 해결 방법

1. 현상 expo에서 iOS 시뮬레이터를 실행할 경우 터미널 상에서 아래와 같이 'System Events에 Apple 이벤트를 보낼 권한이 없습니다.' 에러가 발생한다. Expo 개발 웹 UI 상에서는 Error opening is simulator. Check

november11tech.tistory.com

 

728x90
반응형

댓글