Programming/ReactNative

[ReactNative] JSX

코딩뽀시래기 2021. 7. 6. 17:26
728x90

공부 도서: 처음 배우는 리액트 네이티브 / 김범준 / 한빛미디어 / 2021

 

JSX

- 자바스크립트 확장 문법

- 객체 생성과 함수 호출을 위한 문법적 편의를 제공하고자 만들어진 확장 기능

- 리액트 프로젝트에서 사용됨.

- 가독성이 높고 작성하기 쉬움.

- 오류 검사에도 장점이 있음.

- XML과 유사하여 중첩된 구조를 잘 나타낼 수 있음.


1. 하나의 부모

: JSX에서는 여러 개의 요소를 표현할 경우 반드시 하나의 부모로 감싸야 함.

export default function App(){
    return(
    	<Text>Open App!</Text>
        <StatusBar style="auto" />
    );
}
//<Text>와 <StatusBar>가 하나로 감싸져 있지 않아서 오류 발생

위와 같은 에러를 해결하기 위해서는 <View></View> 컴포넌트로 감싸주면 된다. 하지만 View처럼 특정 역할을 컴포넌트로 감싸지 않으면서 여러 개의 컴포넌트를 반환하고 싶은 경우, 아래와 같이 Fragment 컴포넌트를 사용하면 된다.

import { StatusBar } from 'expo-status-bar';
import React, {Fragment} from 'react';
import { Text } from 'react-native';

export default function App() {
    return(
    	<Fragment>
        	<Text>Open App!!</Text>
            <StatusBar style="auto" />
        </Fragment>
    );
}

Fragment 컴포넌트는 단축 문법도 제공한다.

//Fragment 단축 문법
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { Text } from 'react-native';

export default function App() {
    return(
        <>
            <Text>Open App!!</Text>
            <StatusBar style="auto" />
        </>
    );
}

 

2. 자바스크립트 변수

: JSX는 내부에서 자바스크립트의 변수를 전달하여 이용 가능

export default function App(){
    const name = 'GilDong';
    return(
    	<Text>My name is {name}!</Text>
    );
}
//출력 결과: My name is GilDong!

 

3. 자바스크립트 조건문

: JSX에서도 자바스크립트의 조건문을 이용할 수 있음. 단, 제약이 약간 있기 때문에 복잡한 조건인 경우 JSK 밖에서 조건에 따른 값을 설정하고,  JSX 내에서는 최대한 간단하게 작성하는 것이 코드를 좀 더 깔끔하게 작성하는 방법임.

 

- if 조건문

export default function App(){
    const name = 'GilDong';
    return(
    	<View>
    	    <Text>
                {(() => {
                    if (name === 'CheolSu') return 'My name is CheolSu';
                    else if (name === 'GilDong') return 'My name is GilDong';
                    else return 'My name is React Native';
                })()}
            </Text>
    	</View>
    );
}
//출력 결과: My name is GilDong

- 삼항 연산자

export default function App(){
    const name = 'GilDong';
    return(
    	<View>
    	    <Text>
                My name is {name === 'GilDong' ? 'GilDong Hong' : 'React Native'}
            </Text>
    	</View>
    );
}
//출력 결과: My name is GilDong Hong

- AND 연산자와 OR 연산자

export default function App(){
    const name = 'GilDong';
    return(
    	<View>
            {name === 'GilDong' && (
    	        <Text>My name is GilDong</Text>
            )}
            {name !== 'GilDong' && (
    	        <Text>My name is not GilDong</Text>
            )}
    	</View>
    );
}
//출력 결과: My name is GilDong

: JSX에서 false는 렌더링되지 않기 때문에 AND 연산자 앞의 조건이 참일 때 뒤의 내용이 나타나고, 거짓인 경우 나타나지 않음. OR 연산자는 반대로 앞의 조건이 거짓인 경우 뒤의 내용이 나타나고, 참인 경우 나타나지 않음.

 

4. null과 undefined

: JSX의 경우 null은 허용하지만 undefined는 오류가 발생함.

export default function App(){
    return null;
}
//정상 동작. 화면에는 아무것도 나타나지 않음.
export default function App(){
    return undefined;
}
//오류 메시지

 

5. 주석

: JSX의 주석은 {/**/}

단, 태그 안에서 주석을 사용할 때는 자바스트립트처럼 // 또는 /**/ 사용 가능

export default function App(){
    return(
    	<View>
        {/* Comment */}
            <Text /* Comment */>Comment></Text>
    	    <Text
            //Comment
            >
                Comment
            </Text>
    	</View>
    );
}
//코드블럭에 JSX가 없어서 Javascript 스타일로 했더니 주석 회색 표시가 안 됨. 실제로는 저 부분들 다 주석

 

6. 스타일링

: JSX에서는 HTML과 달리 style에 문자열로 입력하는 것이 아니라 객체 형태로 입력해야 함. 그리고 하이픈(-)으로 연결된 이름은 하이픈을 제거하고 Camel 표기법으로 작성. (예: backgroundColor)

export default function App(){
    return(
        <View
            style={{
                flex: 1,
                backgroundColor: '#fff',
                alignItems: 'center',
                justifyContent: 'center',
            }}
        >
    	    <Text>React Native!!!</Text>
        </View>
    );
}
728x90

'Programming > ReactNative' 카테고리의 다른 글

[ReactNative] 4장 - 스타일링  (0) 2021.07.21
[ReactNative] 3장 - 컴포넌트  (0) 2021.07.21
[ReactNative] 리액트네이티브 책  (0) 2021.06.29
[ReactNative] async와 await  (0) 2021.03.06
[ReactNative 기초] StyleSheet 사용  (0) 2021.03.06