본문 바로가기

웹 프로그래밍/React Native

React Navigation

사용 이유

react native에서 화면 전환 기능을 사용하기 위해서는 navigation을 이용해야한다. router와 기능이 유사하지만 react native는 router를 사용하지 못하기 때문이다. react native에서 쓰이는 라우터의 종류가 여러가지 있으나, 그 중에서 가장 많이 쓰이는 것은 react navigation이다. react navigation은 공식 문서도 존재할 뿐만 아니라, 많은 사람들이 사용하고 있어 오류를 해결하기 수월하다.

 

원리

스택에 화면을 쌓아두어, 필요할 때 이 스택안에서 이동할 수 있다. 하지만, 스택 안에서 이동할 경우 이전 페이지를 유지할 수 있지만, 돌아갔을때, 화면을 reloading 하지 못하는 단점이 있다.

 

설치

yarn add react-navigation
npm install react-navigation

yarn add @react-navigation/native
npm install @react-navigation/native

yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view

Stack

yarn add @react-navigation/stack
npm install @react-navigation/stack

createStackNavigator

screen과 navigator 객체를 리턴

navigator는 screen을 자식 요소로 포함하고, 여러 screen을 자식 요소로 삼을 수 있음

 

NavigationContainer

navigator tree와 여러 navigation들을 포함

최상위 루트에 속하므로 주로 App.js에서 사용

 

 

Navigator

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

intialRouteName

App.js를 reload하거나 screen에서 변화를 시도할 때, 지정해준 screen으로 이동

 

Moving between screens

방법

navigate와 push를 이용

navigation.navigate('Details')
navigation.push('Details')

 

navigate vs push

navigate는 먼저 동일한 route 객체가 있는지 확인해서 있으면 해당 route로 이동하고, 없으면 route를 스택에 새로 쌓음

push는 무조건 route를 스택에 새로 쌓음

∴ 지나온 루트를 순차적으로 기록하기 위해선 push를 쓰는 것이 나음

 

※ navigate를 써서 무조건 스택에 넣으려면?

navigate({routeName: ‘MyRoute’, key: data.uniqueId, params: data})

 

'웹 프로그래밍 > React Native' 카테고리의 다른 글

오류 정리  (0) 2020.09.28
Redux  (0) 2020.09.20
Axios vs Fetch  (0) 2020.09.19
React Native 비동기 요청 오류  (0) 2020.09.19
개발 환경  (0) 2020.09.19