✏️ 공부기록/React & Next.js
React-Native 필수 태그 정리
서카츄
2025. 12. 6. 16:42
필수 컴포넌트(태그) 한 번에 이해하기 – 예제 코드로 끝내기
import { StatusBar } from "expo-status-bar";
import { Button, FlatList, Text, TextInput, TouchableOpacity, View, StyleSheet } from "react-native";
import { SafeAreaView } from "react-native-safe-area-context";
export default function ReactNativeTagsPage() {
const onPressButton = () => {
alert("버튼을 누르셨군요!");
};
const onChangeText = (text: string) => {
console.log(text);
};
const onScroll = () => {
console.log("스크롤이 내려갔어요!");
};
return (
<SafeAreaView style={{ flex: 1, backgroundColor: "red" }} edges={["top"]}>
<StatusBar style="light" />
<Button title="등록하기" onPress={onPressButton} />
<TouchableOpacity onPress={onPressButton}>
<Text>안녕하세요~</Text>
</TouchableOpacity>
<TextInput
onChangeText={onChangeText}
secureTextEntry={true}
style={styles.input}
/>
<View style={styles.boardList}>
<FlatList
data={[
{ number: "1", title: "게시글제목1" },
{ number: "2", title: "게시글제목2" },
{ number: "3", title: "게시글제목3" },
{ number: "4", title: "게시글제목4" },
{ number: "5", title: "게시글제목5" },
{ number: "6", title: "게시글제목6" },
{ number: "7", title: "게시글제목7" },
{ number: "8", title: "게시글제목8" },
{ number: "9", title: "게시글제목9" },
{ number: "10", title: "게시글제목10" },
]}
renderItem={({ item }) => (
<Text>글번호:{item.number}, 글제목:{item.title}</Text>
)}
onScroll={onScroll}
/>
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
input: {
borderWidth: 2,
borderColor: "blue",
},
boardList: {
height: 100,
backgroundColor: "yellow",
},
});
이 코드 안에 기본적으로 꼭 알아야 할 컴포넌트들
- 화면 안전 영역: SafeAreaView
- 상태바: StatusBar
- 버튼 계열: Button, TouchableOpacity
- 텍스트: Text
- 입력창: TextInput
- 레이아웃 박스: View
- 리스트: FlatList
- 스타일: StyleSheet
2. SafeAreaView – 노치 영역 피해서 안전하게 보여주기
<SafeAreaView style={{ flex: 1, backgroundColor: "red" }} edges={["top"]}>
{/* 화면 내용들 */}
</SafeAreaView>
SafeAreaView란?
- 아이폰처럼 상단 노치, 하단 홈 인디케이터가 있는 기기들에서
- 내용이 잘리지 않도록 안전한 영역만 사용하도록 도와주는 컴포넌트입니다.
- HTML로 치면 div 비슷한 레이아웃 박스지만,
- “안전 영역(safe area)”를 자동으로 신경 써준다는 점이 다릅니다.
주요 props
- style={{ flex: 1, backgroundColor: "red" }}
- flex: 1 : 남아 있는 화면 전체를 꽉 채우겠다는 뜻
- backgroundColor: "red" : 배경색을 빨간색으로
- edges={["top"]}
- 어떤 방향의 안전 영역을 적용할지 지정
- ["top"] → 상단만
- 필요에 따라 ["top", "bottom"] 같은 식으로도 사용 가능
👉 실무에서 팁
화면 전체를 하나 감싸는 최상단 레이아웃은
SafeAreaView를 쓰는 습관을 들이면,
기기마다 이상하게 잘리는 문제를 많이 줄일 수 있습니다.
3. StatusBar – 상단 상태바(시간, 배터리) 스타일 바꾸기
<StatusBar style="light" />
StatusBar란?
- 화면 맨 위에 있는 시간, 배터리, 안테나 아이콘이 있는 영역이 상태바(Status Bar)입니다.
- StatusBar 컴포넌트로 이 부분의 텍스트 색상 / 스타일을 조정할 수 있습니다.
주요 props
- style="light"
- 상태바 아이콘·텍스트 색상을 밝은 스타일로 변경
- 보통 배경이 어두울 때 light를 사용합니다.
- 반대로 배경이 밝으면 dark를 사용합니다.
4. Button vs TouchableOpacity – 버튼 만들기
4-1. Button – 기본 버튼 컴포넌트
<Button title="등록하기" onPress={onPressButton} />
- 가장 기본적인 버튼
- 플랫폼(iOS/Android)에 맞게 기본 스타일이 적용됩니다.
주요 props
- title: 버튼에 표시할 텍스트
- onPress: 버튼을 눌렀을 때 실행할 함수
const onPressButton = () => {
alert("버튼을 누르셨군요!");
};
버튼을 누르면 alert 팝업이 뜨도록 연결해놓은 코드입니다.
4-2. TouchableOpacity – 자유롭게 꾸미는 클릭 영역
<TouchableOpacity onPress={onPressButton}>
<Text>안녕하세요~</Text>
</TouchableOpacity>
- TouchableOpacity는 말 그대로 “터치 가능한 영역”입니다.
- 안에 어떤 것을 넣든지 상관없습니다. (Text, View, 아이콘 등)
- 터치하면 살짝 투명해지는 효과(opacity) 가 들어갑니다.
- 디자인을 자유롭게 하고 싶을 때 자주 사용합니다.
주요 props
- onPress: 눌렀을 때 실행할 함수
여기서는 Button과 같은 onPressButton을 재사용해서
눌렀을 때 똑같이 알림이 뜨도록 했습니다.
5. Text – 화면에 글자를 보여주는 기본 컴포넌트
<Text>안녕하세요~</Text>
<Text>글번호:{item.number}, 글제목:{item.title}</Text>
- HTML의 <p>, <span> 같은 역할
- React Native에서 모든 텍스트는 반드시 Text 컴포넌트 안에 있어야 합니다.
- (그냥 문자열만 쓰면 에러)
필요하면 style을 추가해서 크기, 색상, 두께 등을 조절할 수 있습니다.
6. TextInput – 사용자 입력 받기
<TextInput
onChangeText={onChangeText}
secureTextEntry={true}
style={styles.input}
/>
TextInput이 하는 일
- 로그인 화면의 아이디/비밀번호 입력창, 검색창 등
- 사용자에게 텍스트를 입력받는 모든 곳에서 사용하는 컴포넌트입니다.
주요 props
onChangeText
const onChangeText = (text: string) => {
console.log(text);
};
- 사용자가 글자를 입력할 때마다 호출됩니다.
- 입력한 값을 바로 state에 넣거나, 콘솔에 찍거나 할 때 사용합니다.
- 지금은 단순히 console.log(text)로 입력 내용을 개발자 도구에 출력하도록 되어 있습니다.
secureTextEntry={true}
- true로 설정하면 입력한 텍스트가 ●●●●처럼 보입니다.
- 보통 비밀번호 입력창에서 사용합니다.
style={styles.input}
- 아래의 StyleSheet에서 정의한 스타일을 적용합니다.
const styles = StyleSheet.create({
input: {
borderWidth: 2,
borderColor: "blue",
},
// ...
});
- borderWidth: 2 → 테두리 두께 2
- borderColor: "blue" → 테두리 색 파란색
7. View – 레이아웃 박스(컨테이너)
<View style={styles.boardList}>
<FlatList
// ...
/>
</View>
- HTML의 <div>와 거의 같은 역할입니다.
- 레이아웃을 잡거나, 배경색을 주거나, 안에 다른 컴포넌트들을 감쌀 때 사용합니다.
styles.boardList는 이렇게 정의되어 있습니다.
boardList: {
height: 100,
backgroundColor: "yellow",
},
- height: 100 → 높이를 100px 정도로 고정
- backgroundColor: "yellow" → 노란색 배경
이렇게 해서 “노란 박스 안에 리스트(FlatList)가 있는 구조”가 됩니다.
8. FlatList – 스크롤 가능한 리스트 만들기
<FlatList
data={[
{ number: "1", title: "게시글제목1" },
{ number: "2", title: "게시글제목2" },
{ number: "3", title: "게시글제목3" },
{ number: "4", title: "게시글제목4" },
{ number: "5", title: "게시글제목5" },
{ number: "6", title: "게시글제목6" },
{ number: "7", title: "게시글제목7" },
{ number: "8", title: "게시글제목8" },
{ number: "9", title: "게시글제목9" },
{ number: "10", title: "게시글제목10" },
]}
renderItem={({ item }) => (
<Text>글번호:{item.number}, 글제목:{item.title}</Text>
)}
onScroll={onScroll}
/>
FlatList란? (무한스크롤 제공됨)
- 긴 목록을 효율적으로 렌더링해주는 리스트 전용 컴포넌트입니다.
- 스크롤이 가능한 리스트 화면을 만들 때 가장 많이 사용합니다.
주요 props
data
- 리스트에 보여줄 원본 데이터 배열입니다.
- 여기서는 게시글 번호와 제목을 가진 객체 배열:
data={[
{ number: "1", title: "게시글제목1" },
{ number: "2", title: "게시글제목2" },
// ...
]}
renderItem
renderItem={({ item }) => (
<Text>글번호:{item.number}, 글제목:{item.title}</Text>
)}
- data 배열의 각 요소를 어떻게 화면에 보여줄지를 정의하는 함수입니다.
- item에는 현재 렌더링 중인 데이터 객체가 들어옵니다.
- 여기서는 단순히 Text로 “글번호, 글제목”을 한 줄에 보여주게 되어 있습니다.
onScroll
const onScroll = () => {
console.log("스크롤이 내려갔어요!");
};
- 사용자가 리스트를 스크롤할 때마다 호출되는 함수입니다.
- 지금은 단순히 콘솔에 "스크롤이 내려갔어요!" 문자열만 찍습니다.
- 추후에는 무한 스크롤, 특정 지점 도달 감지 등을 할 때 활용할 수 있습니다.
9. StyleSheet – 스타일 모아 관리하기
const styles = StyleSheet.create({
input: {
borderWidth: 2,
borderColor: "blue",
},
boardList: {
height: 100,
backgroundColor: "yellow",
},
});
StyleSheet를 쓰는 이유
- 컴포넌트 안에 style={{ ... }}를 직접 써도 되지만,
- 여러 곳에서 재사용하려면 코드가 지저분해집니다.
- StyleSheet.create를 사용하면
- 스타일을 한 곳에 모아서 이름으로 관리할 수 있습니다.
예를 들어:
<TextInput style={styles.input} />
<View style={styles.boardList} />
이렇게 쓰면,
나중에 스타일을 바꾸고 싶을 때
StyleSheet 부분만 수정하면 됩니다.
10. 정리: 이 예제에서 배운 필수 컴포넌트들
이 한 파일에서 React Native 기본기를 훑을 수 있습니다.
- SafeAreaView : 기기의 안전 영역 안에서 화면을 보여주기
- StatusBar : 상단 상태바 스타일(light/dark) 설정
- Button : 기본 버튼, 간단한 클릭 이벤트 처리
- TouchableOpacity : 디자인 자유도가 높은 터치 가능한 영역
- Text : 화면에 글자를 보여줄 때 반드시 사용하는 컴포넌트
- TextInput : 사용자 입력 받기 (비밀번호 모드, onChangeText 등)
- View : 레이아웃을 나누고 박스를 만드는 기본 컨테이너
- FlatList : 스크롤 가능한 리스트 화면 (data, renderItem, onScroll)
- StyleSheet : 스타일을 깔끔하게 모아서 관리하기
