- render에서는 scrollView를 통해 도시 목록을 보여주고 TouchableWithoutFeedback을 통해 선택한 도시로 이동
각 도시의 주요 장소를 추가하고 출력하는 City.js 추가
- navigationOptions에서 route 객체 반환을 위해 콜백 함수 이용
- addLocation method는 navigation param에서 도시 정보를 가져오고 screenProps의 addLocation을 호출하여 location을 추가
- render에서 도시의 location정보를 scrollView를 통해 출력하고 location을 추가할 수 있는 폼을 추가
손가락이 저릴 정도로 코드를 추가 했다. 실행해보자. 동작은 잘 되지 않는다. 인터페이스만 확인하자
*실행 시 에뮬레이터에서 아래와 같은 메세지와 함께 실행이 되지 않는다면 아래 빌드 터미널을 종료하고 다시 실행해보자.
invariant violation: module rcteventemitter is not a registered callable module (calling receivetouches) callfunctionreturnflushedqueue [native code]:0
실행 결과 화면
*에뮬레이터에서 경고 창 무시하기 react-native run-ios --varient-release 로 실행하면 됨.
데이터 유지하기(AsyncStorage)
앱이 종료된 뒤에도 입력한 데이터를 유지할 수 있도록 캐쉬 모듈을 사용합니다.
npm install @react-native-community/async-storage
위 명령어를 통해 AsyncStorage 모듈을 설치합니다. AsyncStorage는 안드로이드의 SharedPreference와 비슷하다고 보시면 됩니다.
*설치 후 아래와 같은 메세지와 함께 run-ios가 되지 않으면 프로젝트 내 ios폴더에서 pod install로 에뮬레이터에 모듈을 올려준다.
error Could not find the following native modules: RNCAsyncStorage. Did you forget to run "pod install" ?
CitiesApp.js
1. AsyncStorage를 import
2. 저장 key를 정의하고 componentDidMount 메서드에서 캐쉬된 데이터를 불러온다.
3. 데이터 갱신을 위해 addCity, addLocation 메서드에 JSON.stringify를 이용해 cities를 캐쉬 할 수 있도록 한다.
앱을 재실행 하여도 입력한 도시 정보가 유지된다.
이상으로 Navigation, Style적용 및 데이터 캐쉬를 위한 예제를 마무리 하였습니다.
어렵더라도 예제 코드를 이해하고 넘어 갈 수 있도록 합니다.
Tab navigation외 stack, drawer navigation이 있는데 찾아서 연습해 봅시다.