Post

맛집 앱 만들기 프로젝트 Part5 Drawer Navigation 설치 및 적용

Drawer Navigator란

아래와 같이 화면 간 탐색을 위해 왼쪽(때로는 오른쪽)의 서랍을 사용할 수 있게해주는 기능이다

해당 프로젝트에서는 사용자가 바로 Drawer Navigation기능을 사용하는것이 아닌 로그인에 성공한 사용자만 Drawer기능을 사용하고 로그인하지 않은 사용자는 Stack Navigation기능을 사용한다

absolute

Darawer Navigator 설치

1
2
npm install @react-navigation/drawer
npm install react-native-gesture-handler react-native-reanimated

Plugin설정

[matzip/front/babel.config.js] 파일을 수정한다

기존에 작성되어있는 module.exports 가 보이고 presets 속성값이 보일텐데 하단에 plugins를 추가하자

1
2
3
4
module.exports = {
  presets: ['module:@react-native/babel-preset'],
  plugins: ['react-native-reanimated/plugin'],
};

Drawer Navigator 코드 작성

[matzip/front/src/navigations/drawer/MainDrawerNavigator.tsx] 파일을 작성한다

  • 4번째 줄 stack navigator 사용했던것과 동일하게 createDrawerNavigator를 불러와서 Drawer로 사용하도록하자
  • 7번째 줄 Drawer.Navigator로 Drawer.Screen을 감싸고 Drawer.Screen에는 이동할 Screen들을 정의한다
1
2
3
4
5
6
7
8
9
10
11
12
13
import {createDrawerNavigator} from '@react-navigation/drawer';
import MapHomeScreen from '../../screens/MapHomeScreen';

const Drawer = createDrawerNavigator();
function MainDrawerNavigator() {
  return (
    <Drawer.Navigator>
      <Drawer.Screen name="MapHome" component={MapHomeScreen} />
    </Drawer.Navigator>
  );
}

export default MainDrawerNavigator;

MapHomeScreen 코드 작성

[matzip/front/src/navigations/screens/MapHomeScreen.tsx] 파일을 작성한다

Drawer Navigation의 Screen으로 사용할 MapHomeScreen코드를 작성한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

function MapHomeScreen() {
  return (
    <View>
      <Text> 스크린</Text>
    </View>
  );
}

const styles = StyleSheet.create({});

export default MapHomeScreen;

RootNavigator 코드 작성

[matzip/front/src/navigations/root/RootNavigator.tsx] 파일을 작성한다

사용자가 앱을 실행했을때 제일 먼저 걸쳐가는 곳으로 로그인된 사용자인지 아닌지를 구분하는 부분으로 사용할 것이다

  • 1, 2번째 줄에 stack 과 drawer의 navigator 파일들을 import해주도록하자
  • 5번째 줄에 추후에 로그인 검증을 타고 상태값으로 drawer로 보낼지 stack으로 보낼지를 정하겠지만 현재는 임시로 isLoggedIn을 true로 줘서 로그인된 사용자로 가정하고 작성한다
  • 7번째 줄에 5번째 줄의 isLoggedIn정보에 따라 로그인된 상태(true)면 drawer로 로그인이 안된 상태(false)면 stack으로 보내도록한다
1
2
3
4
5
6
7
8
9
10
import AuthStackNavigator from '../stack/AuthStackNavigator';
import MainDrawerNavigator from '../drawer/MainDrawerNavigator';

function RootNavigator() {
  const isLoggedIn = true;

  return <>{isLoggedIn ? <MainDrawerNavigator /> : <AuthStackNavigator />}</>;
}
export default RootNavigator;

App코드 작성

[matzip/front/App.tsx] 파일을 작성한다

  • 이전 코드에서 사용하지 않는 코드는 모두 제거하였다
  • 8번째 줄에서 위에서 작성한 RootNavigator로 앱 실행시 제일 먼저 처리하도록 변경하였다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import {NavigationContainer} from '@react-navigation/native';
import React from 'react';
import RootNavigator from './src/navigations/root/RootNavigator';

function App() {
  return (
    <NavigationContainer>
      <RootNavigator />
    </NavigationContainer>
  );
}

export default App;

Drawer 적용된 현재 화면

absolute

Android 실행 오류시

  • npx react-native start –reset-cache
  • cd android -> .\gradlew clean -> npm run android
This post is licensed under CC BY 4.0 by the author.