내장 컴포넌트
리액트(React)에서 컴포넌트는 UI를 구성하는 독립적이고 재사용 가능한 코드 조각을 의미합니다.
리엑트 네이티브 컴포넌트
리액트 네이티브(React Native)는 모바일 애플리케이션을 개발하기 위한 프레임워크로, 리액트의 개념을 기반으로 하면서 모바일에 특화된 컴포넌트를 제공합니다. 기본적인 리액트 네이티브 컴포넌트는 아래와 같습니다.
1. View
View는 리액트 네이티브(React Native)에서 가장 기본적인 컴포넌트 중 하나로, UI의 빌딩 블록(building block) 역할을 합니다. 웹의 <div> 태그나 iOS의 UIView, Android의 ViewGroup과 유사한 역할을 합니다.
주요 특징
-
컨테이너:
View는 다른 컴포넌트들을 묶어 주는 컨테이너 역할을 할 수 있습니다. 따라서 레이아웃을 구성하는 데 중요한 역할을 합니다. -
스타일링:
View컴포넌트는styleprop을 통해 스타일링될 수 있습니다. 여기에는 배경색, 패딩, 마진, 테두리 등의 스타일 속성을 적용할 수 있습니다. -
터치 이벤트:
View는 사용자의 터치 이벤트에 반응할 수 있습니다. 예를 들면, 사용자의 탭(tap)이나 스와이프(swipe) 등의 동작을 감지하고 해당 동작에 응답할 수 있습니다. -
접근성:
View는 접근성 기능도 지원합니다. 예를 들면, 스크린 리더(screen reader)와 같은 보조 기술에 대한 정보를 제공하는 역할을 합니다. -
레이아웃: 리액트 네이티브는 Flexbox 레이아웃을 사용합니다.
View컴포넌트는 이 Flexbox 레이아웃의 모든 속성을 지원하므로, 복잡한 UI 레이아웃을 구성하는 데에도 활용될 수 있습니다.
사용 예제
import React from "react";
import { View, Text } from "react-native";
const ViewBoxesWithColorAndText = () => {
return (
<View
style={{
flexDirection: "row",
height: 100,
padding: 20,
}}
>
<View style={{ backgroundColor: "blue", flex: 0.3 }} />
<View style={{ backgroundColor: "red", flex: 0.5 }} />
<Text>Hello World!</Text>
</View>
);
};
export default ViewBoxesWithColorAndText;
위에 주어진 코드의 주요 특징을 설명하면 다음과 같습니다.
-
Imports:
React는 React 라이브러리를 가져오기 위한 것입니다.View와Text는 React Native 라이브러리에서 가져온 UI 구성 요소입니다.View는 주로 컨테이너 역할을 하며,Text는 텍스트를 표시합니다.
-
ViewBoxesWithColorAndText 컴포넌트:
- 이 컴포넌트는 3개의 자식 요소를 포함하는
View로 구성되어 있습니다.
- 이 컴포넌트는 3개의 자식 요소를 포함하는
-
외부 View 스타일:
flexDirection: 'row': 자식 요소들이 가로 방향으로 나열됩니다.height: 100: 이 View의 높이는 100 픽셀입니다.padding: 20: 이 View의 모든 방향에 20 픽셀의 패딩이 추가됩니다.
-
자식 요소들:
- 첫 번째
View: 파란색 배경색을 가지며, 부모View의 너비의 30%를 차지합니다. (flex: 0.3) - 두 번째
View: 빨간색 배경색을 가지며, 부모View의 너비의 50%를 차지합니다. (flex: 0.5) Text: "Hello World!"라는 텍스트를 표시합니다.
- 첫 번째
-
Export:
export default ViewBoxesWithColorAndText;를 통해 다른 파일에서 이 컴포넌트를 가져와 사용할 수 있습니다.
위의 설명을 바탕으로, 이 컴포넌트를 화면에 표시하면, 두 개의 서로 다른 색상의 박스와 "Hello World!"라는 텍스트가 가로 방향으로 나열된 모습을 볼 수 있을 것입니다.
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
2. Text
Text는 리액트 네이티브(React Native)의 주요 컴포넌트 중 하나로, 스크린에 텍스 트를 표시하기 위해 사용됩니다. 웹의 <span> 또는 <p> 태그와 유사한 역할을 합니다.
주요 특징
-
텍스트 표시:
Text컴포넌트는 사용자에게 텍스트 정보를 표시하는 데 사용됩니다. -
스타일링:
Text컴포넌트 역시styleprop을 통해 스타일링될 수 있습니다. 폰트 크기, 폰트 색상, 가중치 (두껍게), 텍스트 정렬 방식 등의 다양한 텍스트 스타일링 속성을 지원합니다. -
중첩 가능:
Text컴포넌트는 중첩될 수 있습니다, 즉, 한Text컴포넌트 내부에 또 다른Text컴포넌트를 포함할 수 있습니다. 이를 통해 일부 텍스트 세그먼트에 다른 스타일을 적용하는 등의 복잡한 스타일링이 가능합니다. -
터치 이벤트:
Text컴포넌트에도 터치 이벤트를 적용할 수 있습니다. 이를 통해 텍스트를 탭했을 때의 동작 등을 정의할 수 있습니다. -
텍스트 특화 속성: 텍스트의 줄 간격(line height), 글자 간격(letter spacing), 텍스트 자르기(ellipsis) 등의 텍스트 특화 속성을 설정할 수 있습니다.
사용 예제
import React, {useState} from 'react';
import {Text, StyleSheet} from 'react-native';
const TextInANest = () => {
const [titleText, setTitleText] = useState("Bird's Nest");
const bodyText = 'This is not really a bird nest.';
const onPressTitle = () => {
setTitleText("Bird's Nest [pressed]");
};
return (
<Text style={styles.baseText}>
<Text style={styles.titleText} onPress={onPressTitle}>
{titleText}
{'\n'}
{'\n'}
</Text>
<Text numberOfLines={5}>{bodyText}</Text>
</Text>
);
};
const styles = StyleSheet.create({
baseText: {
fontFamily: 'Cochin',
},
titleText: {
fontSize: 20,
fontWeight: 'bold',
},
});
export default TextInANest;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
코드 설명
-
Imports
import React, {useState} from 'react';import {Text, StyleSheet} from 'react-native';- React와 React의
useStatehook을 가져옵니다. - React Native의
Text컴포넌트와StyleSheet객체를 가져옵니다.
- React와 React의
-
TextInANest 컴포넌트 이 컴포넌트는 2개의 텍스트 요소를 포함하고 있습니다.
-
useState를 사용해titleText상태 변수와 그 값을 설정하는setTitleText함수를 초기화합니다. 초기 값은"Bird's Nest"입니다. -
bodyText는 상수 변수로, 값이"This is not really a bird nest."로 설정되어 있습니다. -
onPressTitle함수는 titleText의 값을"Bird's Nest [pressed]"로 변경합니다. 이 함수는 제목 텍스트를 탭 할 때 호출됩니다. -
return문에서, 상위Text컴포넌트 내부에 두 개의Text컴포넌트를 중첩하여 렌더링합니다. 중첩된 구조를 통해 스타일 및 다른 속성을 상속받을 수 있습니다. -
첫 번째 중첩된
Text컴포넌트는 제목을 표시하며, 누르면onPressTitle함수가 호출됩니다. -
두 번째 중첩된
Text컴포넌트는bodyText의 값을 표시합니다.numberOfLines속성을 통해 최대 5줄까지만 표시하도록 설정되어 있습니다.
-
-
Styles
const styles = StyleSheet.create({baseText: {fontFamily: 'Cochin',},titleText: {fontSize: 20,fontWeight: 'bold',},});StyleSheet.create메소드를 사용하여 스타일을 정의합니다.baseText스타일은Cochin글꼴을 사용하여 텍스트를 표시합니다.titleText스타일은 글꼴 크기를 20으로 설정하고 볼드체로 표시합니다.
-
Export
export default TextInANest;TextInANest컴포넌트를 기본 내보내기로 설정하여 다른 파일에서 임포트하여 사용할 수 있게 합니다.
3. Image
Image는 React Native에서 이미지를 표시하기 위한 기본 컴포넌트입니다. 이 컴포넌트를 사용하면 앱 내에 포함된 정적 이미지 뿐만 아니라 외부 URL에서 가져온 이미지도 표시할 수 있습니다.
주요 특징
-
소스 타입:
Image컴포넌트는 다양한 타입의 이미지 소스를 지원합니다. 이는require를 통해 로컬에서 가져온 이미지 또는 웹 URL을 통해 가져온 이미지일 수 있습니다. -
스타일링:
Image도styleprop을 통해 스타일링될 수 있습니다. 이를 통해 이미지의 크기, 둥근 모서리, 테두리 등의 스타일을 설정할 수 있습니다. -
리사이징:
resizeModeprop을 사용하여 이미지의 리사이징 방식을 지정할 수 있습니다. 예를 들면, 'cover', 'contain', 'stretch', 'repeat', 'center' 등의 값이 있습니다. -
이벤트 처리:
Image컴포넌트는 이미지 로드 완료, 로드 실패와 같은 여러 이벤트에 대한 콜백을 제공합니다. -
페이드 인 효과:
fadeDurationprop을 통해 이미지가 화면에 표시될 때의 페이드 인 효과의 지속 시간을 설정할 수 있습니다 (Android 전용).
사용 예제
import React from 'react';
import {View, Image, StyleSheet} from 'react-native';
const styles = StyleSheet.create({
container: {
paddingTop: 50
},
tinyLogo: {
width: 50,
height: 50,
},
});
const DisplayAnImage = () => {
return (
<View style={styles.container}>
<Image
style={styles.tinyLogo}
source={require('@expo/snack-static/react-native-logo.png')}
/>
<Image
style={styles.tinyLogo}
source={{
uri: 'https://reactnative.dev/img/tiny_logo.png',
}}
/>
</View>
);
};
export default DisplayAnImage;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
해당 코드는 React Native를 사용하여 이미지를 화면에 표시하는 간단한 컴포넌트를 정의합니다.
-
Imports
import React from 'react';import {View, Image, StyleSheet} from 'react-native';- React 라이브러리를 가져옵니다.
- React Native에서
View,Image, 그리고StyleSheet를 가져옵니다.
-
Styles
const styles = StyleSheet.create({container: {paddingTop: 50},tinyLogo: {width: 50,height: 50,},});StyleSheet.create를 사용하여 스타일을 정의합니다.container는 상단에 50의 패딩을 갖습니다.tinyLogo는 50x50의 크기로 이미지를 표시합니다.
-
DisplayAnImage 컴포넌트
View컴포넌트 내부에 두 개의Image컴포넌트를 포함하고 있습니다.- 첫 번째
Image컴포넌트는 로컬에서 이미지를 가져와 화면에 표시합니다. 여기서는@expo/snack-static/react-native-logo.png경로의 이미지를 사용합니다. - 두 번째
Image컴포넌트는 웹 URL에서 이미지를 가져와 화면에 표시합니다. 여기서는https://reactnative.dev/img/tiny_logo.pngURL의 이미지를 사용합니다.
-
Export
export default DisplayAnImage;DisplayAnImage컴포넌트를 기본 내보내기로 설정하여 다른 파일에서 임포트하여 사용할 수 있게 합니다.
4. TextInput
TextInput은 React Native에서 사용자의 텍스트 입력을 받아들이기 위한 기본 컴포넌트입니다. 웹의 <input type="text"> 요소와 유사하게 동작하며, 사용자가 텍스트를 입력하거나 수정할 수 있게 해줍니다.
주요 특징
-
텍스트 입력: 사용자가 키보드를 통해 텍스트를 입력할 수 있습니다.
-
스타일링:
TextInput도styleprop을 사용하여 스타일링될 수 있습니다. 이를 통해 입력 필드의 크기, 테두리, 폰트 스타일 등을 지정할 수 있습니다. -
플레이스홀더:
placeholderprop을 통해 사용자에게 입력 예시나 가이드를 제공할 수 있습니다. -
값 제어:
valueprop을 통해 현재의 입력 값에 접근하거나 변경할 수 있습니다. 또한,onChangeTextprop을 사용하여 텍스트가 변경될 때 콜백 함수를 실행할 수 있습니다. -
키보드 타입:
keyboardTypeprop을 사용하여 특정 타입의 키보드 레이아웃을 표시하도록 요청할 수 있습니다 (예: 숫자만 입력하는 경우 'numeric'). -
다중 행:
multilineprop을 통해 여러 줄의 텍스트 입력을 허용할 수 있습니다. -
이벤트 처리: 여러 가지 이벤트에 대한 콜백 함수를 제공합니다. 예를 들어,
onFocus,onBlur,onSubmitEditing등이 있습니다.
사용 예제
import React from 'react';
import {SafeAreaView, StyleSheet, TextInput} from 'react-native';
const TextInputExample = () => {
const [text, onChangeText] = React.useState('Useless Text');
const [number, onChangeNumber] = React.useState('');
return (
<SafeAreaView>
<TextInput
style={styles.input}
onChangeText={onChangeText}
value={text}
/>
<TextInput
style={styles.input}
onChangeText={onChangeNumber}
value={number}
placeholder="useless placeholder"
keyboardType="numeric"
/>
</SafeAreaView>
);
};
const styles = StyleSheet.create({
input: {
height: 40,
margin: 12,
borderWidth: 1,
padding: 10,
},
});
export default TextInputExample;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
이 코드는 React Native를 사용하여 두 개의 텍스트 입력 상자를 화면에 표시하는 컴포넌트를 정의합니다.
-
Imports
import React from 'react';import {SafeAreaView, StyleSheet, TextInput} from 'react-native';- React와 React Native의
SafeAreaView,StyleSheet,TextInput컴포넌트를 가져옵니다.
- React와 React Native의
-
TextInputExample 컴포넌트
useState를 사용하여 텍스트 상태 변수text와 숫자 상태 변수number를 초기화합니다.text는 초기값으로 'Useless Text'를 가지고 있습니다.onChangeText는text상태를 업데이트하고,onChangeNumber는number상태를 업데이트합니다.SafeAreaView내부에 두 개의TextInput컴포넌트를 반환합니다.- 첫 번째
TextInput은text값을 표시하며, 값이 변경될 때onChangeText함수를 호출하여 상태를 업데이트합니다. - 두 번째
TextInput은number값을 표시하며, 값이 변경될 때onChangeNumber함수를 호출하여 상태를 업데이트합니 다. 또한 숫자 키보드를 표시하기 위해keyboardType속성을 "numeric"으로 설정하고, 입력 상자에 아무 값도 없을 때 "useless placeholder"라는 텍스트를 표시하기 위해placeholder속성을 사용합니다.
- 첫 번째
-
Styles
const styles = StyleSheet.create({input: {height: 40,margin: 12,borderWidth: 1,padding: 10,},});StyleSheet.create메소드를 사용하여 입력 상자의 스타일을 정의합니다. 입력 상자는 높이 40, 여백 12, 테두리 두께 1, 패딩 10을 가집니다.
-
Export
export default TextInputExample;TextInputExample컴포넌트를 기본 내보내기로 설정하여 다른 파일에서 임포트하여 사용할 수 있게 합니다.
5. ScrollView
ScrollView는 React Native에서 콘텐츠가 화면 크기를 넘어서면 스크롤하여 보여주기 위한 기본 컴포넌트입니다. 일반적으로 화면의 크기보다 큰 컴포넌트나 리스트를 스크롤하여 볼 수 있게 해줍니다.
주요 특징
-
스크롤 가능한 컨테이너: 화면에 표시할 수 있는 범위를 넘는 콘텐츠를 감싸서 사용자가 스크롤하여 전체 내용을 볼 수 있게 합니다.
-
방향: 기본적으로 세로로 스크롤됩니다. 하지만
horizontalprop을true로 설정하면 가로로 스크롤되게 할 수 있습니다. -
통합 스타일링:
ScrollView도styleprop을 사용하여 스타일링할 수 있습니다. -
이벤트 처리: 여러 스크롤 이벤트에 대한 콜백 함수를 제공합니다. 예를 들면,
onScroll,onMomentumScrollStart,onMomentumScrollEnd등이 있습니다. -
리프레시 컨트롤:
refreshControlprop을 통해 pull-to-refresh 기능을 구현할 수 있습니다. -
퍼포먼스: 대용량의 리스트나 그리드를 표시할 때는
ScrollView보다는FlatList나SectionList같은 최적화된 컴포넌트를 사용하는 것이 좋습니다.
사용 예제
import React from 'react';
import {
StyleSheet,
Text,
SafeAreaView,
ScrollView,
StatusBar,
} from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Text>
</ScrollView>
</SafeAreaView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
이 코드는 React Native를 사용하여 스크롤 가능한 텍스트 영역을 표시하는 간단한 애플리케이션을 설명합니다.
-
Imports
import React from 'react';import {StyleSheet,Text,SafeAreaView,ScrollView,StatusBar,} from 'react-native';- 필요한 모듈과 컴포넌트들, 즉
React,StyleSheet,Text,SafeAreaView,ScrollView, 그리고StatusBar를 React Native에서 가져옵니다.
- 필요한 모듈과 컴포넌트들, 즉
-
App 컴포넌트
SafeAreaView는 애플리케이션의 메인 컨테이너 역할을 합니다. 이 컨테이너는 디바이스의 상태 표시줄 높이만큼 위에 패딩을 가집니다.ScrollView는 스크롤이 가능한 영역을 제공합니다. 이 예제에서는ScrollView내부에Text컴포넌트를 넣어 스크롤이 가능한 텍스트 영역을 만듭니다.Text컴포넌트는Lorem ipsum...과 같은 샘플 텍스트를 표시합니다.
-
Styles
const styles = StyleSheet.create({container: {flex: 1,paddingTop: StatusBar.currentHeight,},scrollView: {backgroundColor: 'pink',marginHorizontal: 20,},text: {fontSize: 42,},});StyleSheet.create를 사용해 스타일을 정의합니다.container스타일은 전체 화면을 차지하게 설정되며(flex: 1), 상태 표시줄의 높이만큼 위쪽 패딩이 적용됩니다.scrollView스타일은 배경색을 'pink'로 설정하고, 양쪽 가로 마진을 20으로 설정합니다.text스타일은 텍스트의 글꼴 크기를 42로 설정합니다.
-
Export
export default App;App컴포넌트를 기본 내보내기로 설정하여 다른 파일에서 임포트하여 사용할 수 있게 합니다.
6. Button
Button은 React Native에서 기본적으로 제공되는 사용자 인터페이스 컴포넌트 중 하나로, 사용자가 터치할 수 있는 버튼 요소를 나타냅니다.
주요 특징
-
간단한 인터페이스:
Button은 간단한 API를 제공하며, 주로 제목과 이벤트 핸들러를 설정하는 데 사용됩니다. -
플랫폼에 따른 스타일링:
Button은 기본적으로 현재 플랫폼(iOS, Android 등)의 네이티브 스타일링을 따릅니다. -
제한된 커스터마이징:
Button컴포넌트는 커스터마이징 옵션이 제한적입니다. 더 많은 스타일링이나 기능을 원한다면, 다른 컴포넌트나 서드파티 라이브러리를 검토하는 것이 좋습니다.
사용 예제
import React from 'react';
import {
StyleSheet,
Button,
View,
SafeAreaView,
Text,
Alert,
} from 'react-native';
const Separator = () => <View style={styles.separator} />;
const App = () => (
<SafeAreaView style={styles.container}>
<View>
<Text style={styles.title}>
The title and onPress handler are required. It is recommended to set
accessibilityLabel to help make your app usable by everyone.
</Text>
<Button
title="Press me"
onPress={() => Alert.alert('Simple Button pressed')}
/>
</View>
<Separator />
<View>
<Text style={styles.title}>
Adjust the color in a way that looks standard on each platform. On iOS,
the color prop controls the color of the text. On Android, the color
adjusts the background color of the button.
</Text>
<Button
title="Press me"
color="#f194ff"
onPress={() => Alert.alert('Button with adjusted color pressed')}
/>
</View>
<Separator />
<View>
<Text style={styles.title}>
All interaction for the component are disabled.
</Text>
<Button
title="Press me"
disabled
onPress={() => Alert.alert('Cannot press this one')}
/>
</View>
<Separator />
<View>
<Text style={styles.title}>
This layout strategy lets the title define the width of the button.
</Text>
<View style={styles.fixToText}>
<Button
title="Left button"
onPress={() => Alert.alert('Left button pressed')}
/>
<Button
title="Right button"
onPress={() => Alert.alert('Right button pressed')}
/>
</View>
</View>
</SafeAreaView>
);
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
marginHorizontal: 16,
},
title: {
textAlign: 'center',
marginVertical: 8,
},
fixToText: {
flexDirection: 'row',
justifyContent: 'space-between',
},
separator: {
marginVertical: 8,
borderBottomColor: '#737373',
borderBottomWidth: StyleSheet.hairlineWidth,
},
});
export default App;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
이 코드는 React Native를 사용하여 다양한 속성을 갖는 버튼들을 화면에 표시하는 애플리케이션을 설명합니다.
-
Imports
import React from 'react';import {StyleSheet,Button,View,SafeAreaView,Text,Alert,} from 'react-native';필요한 모듈과 컴포넌트들을 React Native에서 가져옵니다.
-
Separator 컴포넌트
const Separator = () => <View style={styles.separator} />;세로 방향의 간격 및 구분선을 만들기 위한 간단한 컴포넌트입니다.
-
App 컴포넌트 이 컴포넌트는 여러 개의
View컨테이너를 포함하며, 각각의View안에는 설명용Text와Button이 있습니다.첫 번째 버튼은 기본 설정을 가진 버튼입니다.두 번째 버튼은color속성을 사용하여 색상을 조절합니다. iOS에서는 텍스트의 색상을 변경하고, Android에서는 버튼의 배경색을 변경합니다.세 번째 버튼은disabled속성으로 인해 비활성화되어 있습니다. 따라서 클릭해도 어떤 동작도 발생하지 않습니다.- 마지막
두 버튼은 같은 행에 나란히 배치됩니다. 이는styles.fixToText스타일에 의해flexDirection: 'row'속성으로 설정되었기 때문입니다.
-
Styles
const styles = StyleSheet.create({ ... });애플리케이션의 스타일을 정의합니다. 각 스타일은 컴포넌트의 시각적 표현을 제어합니다.
container스타일은 앱의 주 컨테이너를 중앙에 배치합니다.title스타일은 각 섹션의 제목 텍스트에 적용됩니다.fixToText는 두 버튼을 같은 행에 배치하는 데 사용됩니다.separator스타일은 각 섹션을 구분하는 구분선을 정의합니다.
-
Export
export default App;App컴포넌트를 기본 내보내기로 설정하여 다른 파일에서 임포트하여 사용할 수 있게 합니다.
7. FlatList
FlatList는 React Native에서 큰 목록 데이터를 효율적으로 표시하기 위한 컴포넌트입니다. 이 컴포넌트는 뷰가 화면에 표시될 때만 렌더링하는 'windowing' 기술을 사용하여 성능을 최적화합니다.
주요 특징
- 성능 최적화: 화면에 보이지 않는 항목은 렌더링되지 않아 렌더링 부하를 줄입니다.
- 풀링 기술: 이전에 사용된 항목 뷰는 재사용될 수 있습니다.
- 내장된 스크롤: 자동으로 스크롤 기능이 내장되어 있습니다.
사용 예제
import React from 'react';
import {
SafeAreaView,
View,
FlatList,
StyleSheet,
Text,
StatusBar,
} from 'react-native';
const DATA = [
{
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
title: 'First Item',
},
{
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
title: 'Second Item',
},
{
id: '58694a0f-3da1-471f-bd96-145571e29d72',
title: 'Third Item',
},
];
type ItemProps = {title: string};
const Item = ({title}: ItemProps) => (
<View style={styles.item}>
<Text style={styles.title}>{title}</Text>
</View>
);
const App = () => {
return (
<SafeAreaView style={styles.container}>
<FlatList
data={DATA}
renderItem={({item}) => <Item title={item.title} />}
keyExtractor={item => item.id}
/>
</SafeAreaView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop: StatusBar.currentHeight || 0,
},
item: {
backgroundColor: '#f9c2ff',
padding: 20,
marginVertical: 8,
marginHorizontal: 16,
},
title: {
fontSize: 32,
},
});
export default App;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
이 코드는 React Native를 사용하여 간단한 리스트 뷰를 만드는 예제입니다. 주요 부분들을 세부적으로 살펴보겠습니다.
-
Imports
import React from 'react';import {SafeAreaView,View,FlatList,StyleSheet,Text,StatusBar,} from 'react-native';앱을 구성하기 위해 필요한 React Native의 컴포넌트와 모듈들을 가져옵니다.
-
DATA 상수
const DATA = [ ... ];리스트 뷰에 표시될 데이터의 배열입니다. 각 아이템은 고유한
id와title을 가집니다. -
ItemProps 타입
type ItemProps = {title: string};TypeScript를 사용하여
Item컴포넌트의props형식을 정의합니다. 여기서는title이라는 문자열 속성만 포함됩니다. -
Item 컴포넌트
const Item = ({title}: ItemProps) => ( ... );개별 리스트 아이템을 표시하는 컴포넌트입니다. 배경색과 패딩, 그리고 텍스트 스타일을 가진
Text컴포넌트를 포함합니다. -
App 컴포넌트
const App = () => { ... };앱의 메인 컴포넌트입니다.
FlatList컴포넌트를 사용하여DATA배열의 아이템들을 표시합니다.dataprop은 표시할 데이터를 지정합니다.renderItemprop은 각 아이템을 어떻게 렌더링할지를 정의합니다.keyExtractorprop은 각 아이템의 고유 키를 추출하는 함수를 지정합니다. 여기서는 아이템의id를 사용합니다.
-
Styles
const styles = StyleSheet.create({ ... });애플리케이션의 스타일을 정의하는 부분입니다. 여기서는 컨테이너, 아이템, 제목의 스타일을 정의하고 있습니다.
-
Export
export default App;App컴포넌트를 기본 내보내기로 설정하여, 다른 파일에서 임포트하여 사용할 수 있게 합니다.
8. SectionList
SectionList는 섹션 헤더와 함께 목록 데이터를 표시하는 컴포넌트입니다. FlatList와 유사하게 성능 최적화 기능을 제공하지만, 섹션별로 데이터를 구분하여 표시할 수 있습니다.
주요 특징
- 섹션 표시: 데이터를 여러 섹션으로 나누어 표시합니다.
- 섹션 헤더: 각 섹션의 시작 부분에 헤더를 제공할 수 있습니다.
사용 예제
import React from 'react';
import {
StyleSheet,
Text,
View,
SafeAreaView,
SectionList,
StatusBar,
} from 'react-native';
const DATA = [
{
title: 'Main dishes',
data: ['Pizza', 'Burger', 'Risotto'],
},
{
title: 'Sides',
data: ['French Fries', 'Onion Rings', 'Fried Shrimps'],
},
{
title: 'Drinks',
data: ['Water', 'Coke', 'Beer'],
},
{
title: 'Desserts',
data: ['Cheese Cake', 'Ice Cream'],
},
];
const App = () => (
<SafeAreaView style={styles.container}>
<SectionList
sections={DATA}
keyExtractor={(item, index) => item + index}
renderItem={({item}) => (
<View style={styles.item}>
<Text style={styles.title}>{item}</Text>
</View>
)}
renderSectionHeader={({section: {title}}) => (
<Text style={styles.header}>{title}</Text>
)}
/>
</SafeAreaView>
);
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
marginHorizontal: 16,
},
item: {
backgroundColor: '#f9c2ff',
padding: 20,
marginVertical: 8,
},
header: {
fontSize: 32,
backgroundColor: '#fff',
},
title: {
fontSize: 24,
},
});
export default App;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
이 코드는 React Native를 사용하여 각 섹션별로 그룹화된 아이템들을 보여주는 리스트를 만드는 예제입니다. 주요 구성 요소들은 다음과 같습니다.
-
Imports
import React from 'react';import {StyleSheet,Text,View,SafeAreaView,SectionList,StatusBar,} from 'react-native';앱을 구성하기 위해 필요한 React Native의 컴포넌트와 모듈들을 가져옵니다.
-
DATA 상수
const DATA = [ ... ];각 섹션별로 그룹화된 아이템들의 데이터입니다. 각 섹션은
title과data로 구성되며,data는 해당 섹션의 아이템들을 배열로 포함합니다. -
App 컴포넌트
const App = () => { ... };앱의 메인 컴포넌트입니다.
SectionList컴포넌트를 사용하여DATA배열의 섹션별 아이템들을 표시합니다.sectionsprop은 표시할 섹션 데이터를 지정합니다.keyExtractorprop은 각 아이템의 고유 키를 생성하는 함수를 지정합니다. 여기서는 아이템의 값과 인덱스를 합쳐서 키를 생성합니다.renderItemprop은 각 아이템을 어떻게 렌더링할지를 정의합니다.renderSectionHeaderprop은 각 섹션의 헤더를 어떻게 렌더링할지를 정의합니다.
-
Styles
const styles = StyleSheet.create({ ... });애플리케이션의 스타일을 정의하는 부분입니다. 여기서는 컨테이너, 아이템, 섹션 헤더, 아이템 제목의 스타일을 정의하고 있습니다.
-
Export
export default App;App컴포넌트를 기본 내보내기로 설정하여, 다른 파일에서 임포트하여 사용할 수 있게 합니다.
9. ActivityIndicator
ActivityIndicator는 React Native에서 제공하는 로딩 인디케이터(또는 스피너) 컴포넌트입니다. 데이터를 가져오는 동안 또는 처리 중일 때 사용자에게 앱이 여전히 작동 중임을 알려주는 데 유용합니다.
주요 특징
- 플랫폼 특화 스타일: 기본적으로
ActivityIndicator는 현재 플랫폼(iOS 또는 Android)의 네이티브 로딩 인디케이터 스타일을 사용합니다. - 커스터마이징: 다양한 속성을 사용하여 인디케이터의 크기, 색상 등을 커스터마이즈할 수 있습니다.
주요 props
- size: 인디케이터의 크기를 설정합니다. 'small' 또는 'large' 중 하나의 문자열 값을 받거나, 숫자 값을 직접 지정할 수 있습니다.
- color: 인디케이터의 색상을 설정합니다. 이 값은 유효한 색상 문자열이어야 합니다 (예: '#0000ff' 또는 'blue').
- animating: 인디케이터가 회전하는지 여부를 결정합니다. 기본값은
true입니다.
사용 예제
import React from 'react';
import {ActivityIndicator, StyleSheet, View} from 'react-native';
const App = () => (
<View style={[styles.container, styles.horizontal]}>
<ActivityIndicator />
<ActivityIndicator size="large" />
<ActivityIndicator size="small" color="#0000ff" />
<ActivityIndicator size="large" color="#00ff00" />
</View>
);
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
horizontal: {
flexDirection: 'row',
justifyContent: 'space-around',
padding: 10,
},
});
export default App;
사진을 클릭하면 예시 코드를 실행해볼 수 있습니다.
이 코드는 React Native를 사용하여 여러 ActivityIndicator를 화면에 표시하는 애플리케이션의 예제입니다. ActivityIndicator는 앱에서 로딩이나 데이터 처리 중임을 사용자에게 알려주는 회전하는 원형 인디케이터입니다.