티스토리 뷰
framework/ReactNative
갓난애기도 배울 수 있는 React Native 가이드 ⑥ – FlatList와 상세 화면 연결하기 (실전 To-Do 앱 연동)
octo54 2025. 4. 17. 11:20반응형
갓난애기도 배울 수 있는 React Native 가이드 ⑥ – FlatList와 상세 화면 연결하기 (실전 To-Do 앱 연동)
앞서 우리는 FlatList로 할 일 목록을 만들고,
React Navigation을 이용해 화면 전환 구조도 구현했습니다.
이번 글에서는 이 둘을 연결해서,
할 일 목록을 클릭하면 해당 상세 화면으로 이동하는 실전 To-Do 앱 기능을 완성해 봅니다.
지금까지 배운 모든 내용을 실전에 적용하는 “통합 실습편”입니다! 🚀
✅ 1. 준비: 프로젝트 디렉토리 구조
/screens
├── HomeScreen.js
└── DetailScreen.js
App.js
✅ 2. App.js – 네비게이션 설정
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import HomeScreen from './screens/HomeScreen';
import DetailScreen from './screens/DetailScreen';
const Stack = createNativeStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} options={{ title: '할 일 목록' }} />
<Stack.Screen name="Detail" component={DetailScreen} options={{ title: '할 일 상세' }} />
</Stack.Navigator>
</NavigationContainer>
);
}
✅ 3. HomeScreen.js – FlatList + 네비게이션 연동
반응형
import React, { useState } from 'react';
import {
View,
Text,
TextInput,
FlatList,
Button,
TouchableOpacity,
StyleSheet,
} from 'react-native';
const HomeScreen = ({ navigation }) => {
const [todo, setTodo] = useState('');
const [todoList, setTodoList] = useState([]);
const addTodo = () => {
if (todo.trim() === '') return;
const newTodo = {
id: Date.now().toString(),
title: todo,
};
setTodoList([newTodo, ...todoList]);
setTodo('');
};
return (
<View style={styles.container}>
<TextInput
placeholder="할 일을 입력하세요"
value={todo}
onChangeText={setTodo}
style={styles.input}
/>
<Button title="추가하기" onPress={addTodo} />
<FlatList
data={todoList}
keyExtractor={(item) => item.id}
renderItem={({ item }) => (
<TouchableOpacity
style={styles.todoItem}
onPress={() => navigation.navigate('Detail', { todo: item })}
>
<Text style={styles.todoText}>📝 {item.title}</Text>
</TouchableOpacity>
)}
ListEmptyComponent={<Text style={{ marginTop: 20 }}>할 일이 없습니다.</Text>}
style={{ marginTop: 20 }}
/>
</View>
);
};
const styles = StyleSheet.create({
container: { flex: 1, padding: 20, paddingTop: 60 },
input: {
borderWidth: 1,
borderColor: '#bbb',
padding: 10,
borderRadius: 6,
marginBottom: 10,
},
todoItem: {
padding: 12,
borderBottomWidth: 1,
borderColor: '#eee',
},
todoText: {
fontSize: 18,
},
});
export default HomeScreen;
✅ 4. DetailScreen.js – 전달된 데이터 표시
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const DetailScreen = ({ route }) => {
const { todo } = route.params;
return (
<View style={styles.container}>
<Text style={styles.label}>할 일 번호</Text>
<Text style={styles.content}>{todo.id}</Text>
<Text style={styles.label}>제목</Text>
<Text style={styles.content}>{todo.title}</Text>
</View>
);
};
const styles = StyleSheet.create({
container: { flex: 1, padding: 20 },
label: { fontSize: 18, color: '#888', marginTop: 16 },
content: { fontSize: 20, fontWeight: 'bold' },
});
export default DetailScreen;
✅ 5. 흐름 요약
- HomeScreen에서 FlatList로 할 일 목록 표시
- 항목 클릭 → navigation.navigate('Detail', { todo })
- DetailScreen에서 route.params.todo로 데이터 접근
- 상세 정보를 화면에 출력
✅ 6. 추가 팁 (선택 구현)
기능 구현 방식
완료 체크/삭제 | Swipeable, Checkbox, IconButton 활용 |
중요 표시 | todo.important 필드 추가 후 스타일 분기 |
날짜 표시 | createdAt 값 저장 후 출력 (toLocaleDateString()) |
✅ 7. 이번 글에서 배운 것
- FlatList 아이템 클릭 이벤트 처리
- navigation.navigate()로 파라미터 전달
- route.params로 상세 화면 데이터 표시
- 실전 To-Do 앱 구조의 기초 완성
📘 다음 글 예고
갓난애기도 배울 수 있는 React Native 가이드 ⑦ – 앱 완성 후 빌드 및 배포 전략 (Android & iOS)
앱을 잘 만들었으니 이제 세상에 공개해야겠죠?
다음 편에서는 APK 빌드, iOS 시뮬레이터 실행, 실제 기기 테스트 및 배포 흐름을 정리합니다!
React Native FlatList 상세화면,React Native 리스트 화면전환,React Native navigation with params,React Native ToDo 상세 보기,React Native route.params 사용법,React Native 화면 이동 데이터 전달,React Native 리스트 클릭 이벤트,React Native 화면 전환 예제,React Native 앱 구조 연동,React Native 실전 앱 개발
'framework > ReactNative' 카테고리의 다른 글
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- rag
- nodejs
- 백엔드개발
- REACT
- gatsbyjs
- Python
- 프론트엔드
- Ktor
- App Router
- seo 최적화 10개
- 관리자
- github
- Docker
- nextJS
- 파이썬 알고리즘
- Prisma
- NestJS
- CI/CD
- PostgreSQL
- 프론트엔드면접
- fastapi
- LangChain
- Webpack
- SEO최적화
- kotlin
- 웹개발
- Next.js
- llm
- 개발블로그
- AI챗봇
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형