코딩하는 김딸기
RouteView.tsx(경로 리스트) 본문
이 코드에서는 React Native를 사용하여 교통 경로를 검색하고 그에 대한 정보를 보여주는 애플리케이션의 주요 기능이 구현되어 있습니다. 주요 요소를 차례대로 설명드리겠습니다.
1. 상단 탭 및 탭 설정 (Tabs)
- transTabs는 탭에 표시될 교통 수단에 대한 아이콘과 라벨을 정의합니다. 예를 들어, "대중"과 "택시" 탭을 정의합니다.
- tabs는 사용자가 선택할 수 있는 경로의 유형을 정의하며, 각 경로 유형에 대한 조합(예: "택시+버스+지하철")이 나열되어 있습니다.
2. 상태 변수 (State Variables)
앱의 여러 상태를 관리하기 위한 변수들이 설정되어 있습니다. 주요 변수들은 다음과 같습니다:
- loading: 로딩 상태를 관리 (API 호출 시 데이터 로딩 중인지 확인)
- searchOriText, searchDestText: 출발지와 도착지 텍스트
- selectedTransTab: 선택된 교통수단 탭 (택시/대중)
- selectedTab: 선택된 경로 유형 탭
- departureTime, arrivalTime: 출발 및 도착 시간
- startPosition, arrivalPosition: 출발지 및 도착지의 위도/경도
- API 호출에 필요한 상태들 (publicRoutes, taxiRoutes, routes 등)
3. fetchRoutes 함수
API에서 경로 데이터를 가져오는 함수입니다. 사용자가 설정한 출발지, 도착지, 시간 등에 따라 API를 호출하여 교통 경로 데이터를 반환합니다.
- axios.get(url)을 통해 API에서 경로 데이터를 요청합니다.
- API 호출이 완료되면 response.data를 반환하고, 로딩 상태는 false로 설정합니다.
4. 경로 클릭 시 처리 (Handle Route Press)
사용자가 경로를 클릭하면 해당 경로의 상세 정보 페이지로 이동하게 됩니다.
- 선택한 경로를 PathDetails 화면으로 넘겨 상세 정보를 표시합니다.
5. 출발지와 도착지 교체 (Swap Locations)
출발지와 도착지의 위치를 교체하는 함수입니다.
- searchOriText와 searchDestText를 교환하여 텍스트를 업데이트합니다.
- 출발지와 도착지의 위도/경도 값도 교환하고, getRoutes() 함수로 새로운 경로를 가져옵니다.
6. 출발 시간 및 도착 시간 처리 (Time Change)
사용자가 출발 시간과 도착 시간을 선택하면 해당 시간을 상태에 저장합니다.
- 출발 시간을 변경하면 departureTime 상태를 업데이트합니다.
- Platform.OS === 'ios'는 iOS에서 시간이 Picker로 계속 표시되도록 설정하는 코드입니다.
7. 시간 포맷 처리 (Time Formatting)
시간을 다양한 형식으로 변환하는 함수들이 정의되어 있습니다:
- formatTime: 시간을 12시간 형식(AM/PM)으로 변환
- formatTotalTime: 총 시간을 "X시간 Y분" 형식으로 변환
8. API 데이터 처리 (getRoutes 함수)
앱이 시작될 때 API 호출을 통해 출발지와 도착지, 현재 시간에 맞는 경로 데이터를 가져오는 함수입니다.
- API 응답 데이터를 받아와서 publicRoutes, taxiRoutes, taxiPublicRoutes에 저장합니다.
- 사용자가 선택한 교통수단에 따라 표시할 경로 데이터를 설정합니다.
요약
이 코드는 출발지와 도착지를 입력받고, 선택된 교통수단에 맞는 경로를 API로부터 받아와 사용자에게 표시하는 기능을 구현합니다. 사용자는 출발 시간과 도착 시간을 설정하고, 탭을 통해 교통수단을 선택할 수 있습니다. 경로를 클릭하면 상세 페이지로 이동하여 해당 경로의 세부 정보를 볼 수 있습니다.
주어진 코드는 대중교통과 택시 경로를 관리하는 앱의 일부입니다. 이 코드는 다양한 탭(예: '대중' 대중교통 탭, '택시' 탭)에 따라 경로를 선택하고 필터링하는 로직을 포함하고 있으며, 도착 시간과 출발 시간을 기준으로 경로를 필터링하고, 경로를 시간 또는 비용 기준으로 정렬하는 기능도 포함되어 있습니다. 각 부분을 좀 더 이해하기 쉽게 나누어 설명하겠습니다.
1. 선택된 탭에 따라 경로 업데이트
- updateRoutesByTransTab 함수는 선택된 탭(tab)에 따라 적절한 경로 데이터를 설정합니다.
- '대중' 탭에서는 publicRoutes를, '택시' 탭에서는 taxiPublicRoutes를 로드하여 setRoutes로 상태를 업데이트합니다.
2. 탭 변경 시 경로 업데이트 및 필터링
- useEffect는 selectedTransTab이 변경될 때마다 호출됩니다. 탭에 맞는 경로를 업데이트하고, 그에 따라 기본 선택 탭을 설정한 후 필터링된 경로를 가져옵니다.
3. 출발 시간 변경 시 API 호출
- departureTime이 변경되면 새로운 경로를 가져오고, 변경된 출발 시간에 맞게 경로를 필터링합니다.
4. 경로 필터링
- getFilteredRoutes 함수는 택시와 대중교통 경로를 각각 필터링하여, 선택된 탭(selectedTab), 출발 시간(departureTime), 도착 시간(arrivalTime), 금액(maxAmount)에 맞는 경로를 필터링합니다. 이후 필터링된 경로를 상태에 업데이트합니다.
- 추가적으로, 경로는 최소 비용 또는 최소 시간을 기준으로 정렬됩니다.
5. 역 아이콘 설정
- getStationIcon 함수는 tftype 값에 따라 지하철 또는 버스 아이콘을 반환합니다.
6. 역 정보 렌더링
- renderStation 함수는 각 역의 정보를 렌더링하는 함수로, 지하철 방향(wayDirection), 급행 여부(subwayClassType), 버스 정보(getLimitedBusInfo) 등을 처리합니다.
이 코드는 사용자가 선택한 탭과 다양한 조건에 따라 대중교통과 택시 경로를 효과적으로 필터링하고 정렬하는 방식으로 설계되었습니다.
이 코드는 교통 수단의 정보를 표시하고, 사용자가 특정 설정을 할 수 있도록 하는 React Native 코드입니다. 코드의 기능을 여러 부분으로 나누어 설명드리겠습니다.
1. stationItem 컴포넌트
이 부분은 각 교통 수단(지하철 또는 버스)의 정보를 화면에 표시하는 부분입니다.
1.1 지하철 정보 (trafficType === 1)
- item.trafficType === 1인 경우, 즉 교통 수단이 지하철일 경우:
- startName (출발 역 이름)을 표시합니다.
- departureTime, way, wayDirection, subwayClassType 등 출발 시간, 경로, 방향, 클래스 유형을 표시합니다.
1.2 버스 정보 (trafficType === 2)
- item.trafficType === 2인 경우, 즉 교통 수단이 버스일 경우:
- startName (버스 정류장 이름)을 표시합니다.
- busArrivalInfo 배열이 있는 경우, 각 버스 도착 정보(arrival1, arrival2)를 표시합니다.
- formatBusTime 함수는 버스의 도착 시간을 포맷팅합니다.
- 도착 정보가 없으면 "도착 예정 정보 없음"을 표시합니다.
2. 탭 선택 (handleTabPress 및 handleTransTabPress)
- handleTabPress: 교통 수단 종류(지하철, 버스 등) 탭을 클릭하면 해당 탭을 활성화시킵니다.
- handleTransTabPress: 추가적인 탭(예: 교통 수단 종류) 클릭 시 해당 탭을 활성화시킵니다.
3. 검색 및 위치 교환 (출발지, 도착지)
- 사용자는 출발지와 도착지를 입력합니다.
- swapLocations: 교환 버튼을 클릭하면 출발지와 도착지의 위치를 바꿉니다.
4. 교통수단 탭 필터 (transTabs 및 탭 렌더링)
- transTabs: 교통수단 종류(예: 지하철, 버스) 필터를 위한 탭입니다.
- 사용자가 탭을 클릭하면 handleTransTabPress 함수가 호출되어 선택된 탭이 강조 표시됩니다.
5. 출발시간 및 도착시간 설정 (DateTimePicker)
- 사용자는 출발 시간과 도착 시간을 설정할 수 있습니다.
- DateTimePicker: 시간을 선택할 수 있는 UI 컴포넌트입니다.
- onDepartureTimeChange: 사용자가 출발 시간을 변경하면 호출되는 함수입니다.
- formatTime: 시간을 지정된 포맷으로 출력합니다.
6. 로딩 인디케이터
- loading이 true일 경우, 로딩 중임을 나타내는 ActivityIndicator가 화면에 표시됩니다.
7. FlatList로 데이터 렌더링
- filteredRoutes 배열에 있는 교통 정보를 FlatList로 렌더링합니다.
- keyExtractor: 각 항목을 고유하게 식별하는 키를 설정합니다.
- ListHeaderComponent: 리스트의 상단에 표시될 컴포넌트(검색창, 탭 등)를 설정합니다.
요약
이 코드는 교통 수단의 정보를 효과적으로 보여주는 UI를 구성하며, 사용자가 출발지, 도착지, 교통수단 등을 선택하고 설정할 수 있는 기능을 제공합니다. 각 교통수단별로 정보를 렌더링하고, 다양한 필터링 옵션과 시간 설정 기능을 제공합니다.
이 코드는 교통 경로를 보여주는 React Native 컴포넌트의 일부로, 사용자에게 금액 한도와 정렬 옵션을 설정하고, 그에 맞는 경로 정보를 표시하는 구조입니다. 각 부분을 자세히 설명하겠습니다.
1. 금액 한도 설정 및 정렬 옵션
- 금액 한도를 설정하는 TextInput 컴포넌트가 있습니다. 사용자는 금액 한도를 입력할 수 있습니다.
- Picker를 사용하여 정렬 옵션을 설정할 수 있습니다. 사용자 선택에 따라 최소 비용, 최소 시간 등의 옵션을 선택할 수 있습니다.
- Icon2는 드롭다운 화살표 아이콘을 표시하여 추가적인 UI 요소로 보입니다.
2. 경로 정보 렌더링
- renderItem: 각 교통 경로 항목을 렌더링하는 함수입니다.
- currentPath: 선택된 탭(예: 대중교통, 택시)에 따라 보여줄 경로를 선택합니다.
- taxiFare: 택시 요금이 선택된 경우, item?.taxi?.summary?.taxiFare에서 택시 요금을 가져옵니다.
- 각 경로는 TouchableOpacity로 감싸져 있어, 클릭 시 handleRoutePress 함수가 호출되며 경로 정보를 보여줍니다.
2.1 경로 정보 헤더
- duration: 전체 경로 소요 시간을 포맷팅하여 표시합니다.
- ecoScore: 선택된 탭에 따라 ecoScore (환경 점수)를 표시합니다.
2.2 경로 세부 정보
- 출발 시간과 도착 시간을 표시하고, 이를 기반으로 전체 소요 시간도 표시합니다.
- payment + taxiFare: 교통 경로의 총 요금(버스/지하철 요금과 택시 요금을 합산한 값)을 표시합니다.
2.3 정거장 정보
- 선택된 탭에 따라 택시 이동 정보를 표시합니다.
- 지하철 또는 버스 경로(subPath)가 존재하면 이를 반복문으로 렌더링하여 각 경로의 정보를 표시합니다.
3. FlatList와의 연동
위의 renderItem 함수는 FlatList의 renderItem prop에 사용됩니다. 이로 인해, 각 경로 항목을 리스트 형식으로 렌더링합니다. FlatList는 데이터의 항목을 반복적으로 렌더링할 때 효율적이므로 많은 데이터를 처리할 때 유용합니다.
요약
이 코드는 교통 경로를 표시하는 UI로, 사용자가 금액 한도와 정렬 옵션을 설정할 수 있는 기능을 제공합니다. 사용자가 선택한 경로(택시, 대중교통 등)에 따라 각 경로의 소요 시간, 요금, 절약된 환경 점수 등을 표시하며, 각 경로는 클릭할 수 있어 상세 정보를 볼 수 있습니다. FlatList를 사용하여 여러 경로를 효율적으로 렌더링합니다.