카테고리 없음
[React Native] Bottom Tab Navigation 구현하기
axnuo
2024. 9. 2. 11:36
Bottom Tab Navigation이란?
Bottom Tab Navigation은 모바일 앱에서 화면 하단에 위치한 탭 바(Tabs)를 통해 여러 화면 간에 이동할 수 있게 해주는 내비게이션 방식입니다. 각 탭에는 아이콘과 라벨을 부여할 수 있으며, 이를 통해 사용자는 직관적으로 원하는 화면으로 전환할 수 있습니다. 이 내비게이션 방식은 특히 많은 기능을 가진 애플리케이션에서 사용자가 주요 기능들 간에 쉽게 접근할 수 있도록 도와줍니다.
여기서 잠깐. React Native의 Navigation 종류는?
React Native에서 내비게이션을 구현하는 방법에는 여러 가지가 있습니다. 그 중에서도 자주 사용되는 방법은 다음과 같습니다:
- Stack Navigation: 한 화면에서 다른 화면으로 이동할 때 새로운 화면이 기존 화면 위에 쌓이는 방식입니다. '뒤로 가기' 버튼을 눌러 이전 화면으로 돌아갈 수 있습니다.
- Drawer Navigation: 화면 왼쪽 또는 오른쪽에서 드로어(메뉴)가 슬라이드로 나타나고, 이 드로어를 통해 다른 화면으로 이동할 수 있는 방식입니다.
- Bottom Tab Navigation: 여러 화면을 하단의 탭 바를 통해 이동할 수 있는 방식으로, 주로 주요 기능들을 탭으로 나누어 제공할 때 사용됩니다.
이 중에서도 Bottom Tab Navigation은 직관적이며 사용자가 쉽게 접근할 수 있는 방식이기 때문에 많은 애플리케이션에서 사용되고 있습니다.
구현 방법
Step 1. 패키지 설치
npm install @react-navigation/native @react-navigation/bottom-tabs react-native-screens react-native-safe-area-context
Step 2. Navigation 설정
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { Text, View } from 'react-native';
// 간단한 화면 컴포넌트 정의
function HomeScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home!</Text>
</View>
);
}
function SettingsScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Settings!</Text>
</View>
);
}
// Tab Navigator 생성
const Tab = createBottomTabNavigator();
function MyTabs() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
);
}
export default function App() {
return (
<NavigationContainer>
<MyTabs />
</NavigationContainer>
);
}
Step 3. 커스터마이징
function MyTabs() {
return (
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarIcon: ({ focused, color, size }) => {
let iconName;
if (route.name === 'Home') {
iconName = focused ? 'home' : 'home-outline';
} else if (route.name === 'Settings') {
iconName = focused ? 'settings' : 'settings-outline';
}
return <Ionicons name={iconName} size={size} color={color} />;
},
tabBarActiveTintColor: 'tomato',
tabBarInactiveTintColor: 'gray',
})}
>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
);
}