기업협업 TIL - 12. Tab Navigator

박태환·2021년 9월 23일
0

기업협업 TIL

목록 보기
12/14
post-thumbnail

오늘은 React Native를 이용하면서 앱 내에서 화면전환을 할 수 있는 Navigator들의 사용법을 정리한다.

먼저 크게 그림으로 정리해놓았다.


먼저 로그인(Auth)을 통해 Main(Tab.Navigator)로 들어간다.
Main(Tab.Navigator)는 Home, Meeting, My Page 세가지 탭으로 이루어져 있다.

코드로 정리하면 이렇다.

export const Navigation = () => {
  return (
    <NavigationContainer>
      <NativeBaseProvider>
        <Stack.Navigator>
          <Stack.Screen name="SignIn" component={SignInPresenter} options={{headerShown: false}} />
          <Stack.Screen name="Main" component={MainTabScreen} options={{headerShown: false}} />
        </Stack.Navigator>
      </NativeBaseProvider>
    </NavigationContainer>
  );
};

먼저 전체 큰 틀을 담당하는 Navigation.

const MainTabScreen = () => {
  return (
    <Tab.Navigator initialRouteName="Home">
      <Tab.Screen name="Home" component={HomeStackScreen} options={{headerShown: false}} />
      <Tab.Screen name="Meeting" component={Meeting} />
      <Tab.Screen name="MyPage" component={MyPage} />
    </Tab.Navigator>
  );
};

그 뒤 Tab.Navigator에 해당하는 MainTab이다.

const HomeStackScreen = () => {
  return (
    <Stack.Navigator>
      <HomeStack.Screen name="Main" component={MainPresenter} options={{headerShown: false}} />
      <HomeStack.Screen name="WorkLog" component={WorkLogPresenter} />
    </Stack.Navigator>
  );
};

마지막으로 Home Stack까지 작성해준다.

모두 합쳐보면 이런 느낌

import React from 'react';
import {NavigationContainer} from '@react-navigation/native';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
import {NativeBaseProvider} from 'native-base';
import {SignInPresenter} from './app/presentation/components/signIn/SignInPresenter';
import {WorkLogPresenter} from './app/presentation/components/workLog/WorkLogPresenter';
import {MainPresenter} from './app/presentation/components/main/MainPresenter';
import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
import {Meeting} from './app/presentation/components/meeting/Meeting';
import {MyPage} from './app/presentation/components/myPage/MyPage';

const Stack = createNativeStackNavigator();
const HomeStack = createNativeStackNavigator();
const Tab = createBottomTabNavigator();

const HomeStackScreen = () => {
  return (
    <Stack.Navigator>
      <HomeStack.Screen name="Main" component={MainPresenter} options={{headerShown: false}} />
      <HomeStack.Screen name="WorkLog" component={WorkLogPresenter} />
    </Stack.Navigator>
  );
};

const MainTabScreen = () => {
  return (
    <Tab.Navigator initialRouteName="Home">
      <Tab.Screen name="Home" component={HomeStackScreen} options={{headerShown: false}} />
      <Tab.Screen name="Meeting" component={Meeting} />
      <Tab.Screen name="MyPage" component={MyPage} />
    </Tab.Navigator>
  );
};

export const Navigation = () => {
  return (
    <NavigationContainer>
      <NativeBaseProvider>
        <Stack.Navigator>
          <Stack.Screen name="SignIn" component={SignInPresenter} options={{headerShown: false}} />
          <Stack.Screen name="Main" component={MainTabScreen} options={{headerShown: false}} />
        </Stack.Navigator>
      </NativeBaseProvider>
    </NavigationContainer>
  );
};

처음 이 두가지 Navigator를 섞어 사용해야 할 때는 감을 못 잡아 많이 헷갈렸지만 한 번 원리를 알고 나니 아주 간단한 문제였다.

profile
mekemeke

0개의 댓글