React Native

리액트 네이티브 기본

spring_sunshine 2022. 2. 20. 22:30

1. JSX

JSX로 작성된 코드는 이후 바벨을 이용하여 자바스크립트 코드로 변환된다.

[JSX 규칙]

  • 반드시 하나의 부모로 감싸져야 한다. (<View>, <Fragment>...)
  • {자바스크립트 변수}를 사용할 수 있다.
  • if문을 사용하면 즉시실행함수문으로 사용해야 한다. 즉, 로직이 복잡하면 JSX 밖에서 조건문을 실행하자.
더보기

즉시실행함수: 정의되자마자 즉시 실행되는 함수 표현식

(function () {
  //do something 
})();
(() => {
  //do something 
})();
  • 삼항연산자를 통해 조건에 따라 다른 값 렌더링이 가능하다.
<Text>Hi, {name === 'Suyeon' ? 'my name' : 'not name'}</Text>
  • AND나 OR 연산자를 이용할 수도 있다.
{name === 'Suyeon' && <Text style={styles.text}>Hi, Suyeon</Text>} //조건이 참이면 뒤에 렌더링
{name === 'Suyeon' || <Text style={styles.text}>Hi, Suyeon</Text>} //조건이 거짓이면 뒤에 렌더링
  • null 반환 시 에러 미발생, undefined 반환 시 에러 발생
  • 주석: {/**/}

스타일링 방법 

  • 웹에서 CSS class를 생성해서 사용하는 방식은 App.js의 StyleSheet 사용과 동일하다.
  • StyleSheet.create를 이용해 style 객체쌍을 여러 개 만들어 한꺼번에 전달한다.
더보기

[CSS]

.blue {
  color: blue;

  font-weight: bold;

  font-size: 30px;

}

.red {

  color: red;

}

 

[RN]

blue: {

  color: 'blue',

  fontWeight: 'bold',

  fontSize: 30,

},

red: {

  color: 'red',

}

  • RN 스타일의 우선순위에 영향을 주는 한 가지는 컴포넌트에 스타일을 전달할 때 나중에 전달하는 스타일이 항상 우선순위가 높다. (CSS의 우선순위는 스타일이 나중에 선언된 red값이 적용된다)
<Text style= {[styles.red, styles.blue]}>red or blue</Text> // blue 스타일 출력
  • 'View'자가 들어간 뷰 컴포넌트는 backgroundColor 속성으로 자신의 바탕색을 설정할 수 있다. 
  • View 컴포넌트는 여러 개의 RN 컴포넌트를 자식 요소로 가질 수 있고, 화면 UI의 레이아웃과 스타일링을 담당하는 중요한 역할을 한다. 
  • flex 속성은 1일 때 height: '100%' 효과가 발생한다. 
  • margin 속성은 View 컴포넌트 뿐 아니라 대부분의 컴포넌트에서 사용되고, 부모/자식 간 혹은 이웃한 형제 요소간의 간격을 조정한다. (marginLeft, marginRight, marginTop, marginBottom)
  • padding 속성은 부모/자식 관계에서 부모 컴포넌트 쪽에 적용하는 스타일 속성이다. paddingTop, paddingBottom, paddingLeft, paddingRight 속성을 사용하여 각 방향에서 자식 컴포넌트가 자신의 영역에서 얼마나 떨어지는지 조정할 수 있다.
  • border 스타일 속성은 자신 영역의 경계를 설정할 수 있는 borderWidth, borderColor, borderRadius, borderStyle 속성들을 사용할 수 있다.
  • html에서 인라인 스타일링 적용법은 스타일 코드를 text 형태로 입력하는 반면, RN에서는 객체로 입력한다. 
더보기

[html]

<div sytle= "width: 0px; height: 0px; display: none; visibility: hidden;">

 

[RN]

<Text style= {{

    color: 'black',

    margin: 10,

    fontSize: '20px',

  }}

>

 

 


2. props vs state

props: 외부(부모)에서 전달, 수정 불가능

state: 내부에서 생성, 수정 가능 

 

state에 변화가 일어나면, 컴포넌트가 리렌더링된다. 또, 부모 컴포넌트가 변하면 자식 컴포넌트도 리렌더링된다.

 

함수 컴포넌트 사용 → useState 사용 

반드시 함께 반환된 setter 함수를 통해서 상태를 변경해야 한다.