๐Ÿงญ 35. React Native Navigation ์™„์ „ ์ •๋ฆฌ โ€” Stack, Tab, Drawer ์ „๋ถ€ ์ดํ•ดํ•˜์ž

JM_Devยท2025๋…„ 5์›” 14์ผ
post-thumbnail

React Native ์•ฑ์—์„œ ํ™”๋ฉด ๊ฐ„ ์ด๋™์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด
React Navigation์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฑฐ์˜ ํ‘œ์ค€์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ฒ˜์Œ์— ์ ‘ํ•˜๋ฉด Stack, Tab, Drawer๊ฐ€ ๋ญ๊ฐ€ ๋‹ค๋ฅด๊ณ , ์–ด๋–ป๊ฒŒ ์ค‘์ฒฉํ•˜๋Š”์ง€
ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” react-navigation์„ ์‚ฌ์šฉํ•  ๋•Œ
๊ธฐ๋ณธ ๊ตฌ์กฐ, ํ™”๋ฉด ์ด๋™ ๋ฐฉ์‹, ์ค‘์ฒฉ ๊ตฌ์กฐ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•ด๋ดค๋‹ค.


โœ… React Navigation์ด๋ž€?

React Native์—์„œ ํ™”๋ฉด ๊ฐ„ ์ด๋™์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๐Ÿ“ฆ ์„ค์น˜ (ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ํฌํ•จ)

npm install @react-navigation/native
npx expo install react-native-screens react-native-safe-area-context react-native-gesture-handler react-native-reanimated

๐Ÿ“ฆ ์›ํ•˜๋Š” navigator ์ถ”๊ฐ€

npm install @react-navigation/native-stack
npm install @react-navigation/bottom-tabs
npm install @react-navigation/drawer

๐Ÿงฑ 1. Stack Navigation

ํ™”๋ฉด์„ ์Œ“์•„์˜ฌ๋ฆฌ๋Š” ๊ตฌ์กฐ. ๊ฐ€์žฅ ๊ธฐ๋ณธ

import { createNativeStackNavigator } from '@react-navigation/native-stack';

const Stack = createNativeStackNavigator();

function AppStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Detail" component={DetailScreen} />
    </Stack.Navigator>
  );
}

๐Ÿ” ์ด๋™

navigation.navigate('Detail');     // ์Šคํฌ๋ฆฐ ์ด๋™
navigation.goBack();              // ์ด์ „ ์Šคํฌ๋ฆฐ์œผ๋กœ

โœ… ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์˜ ๊ธฐ๋ณธ ๋™์ž‘๊ณผ ๋™์ผ
โœ… Android: ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ์ž๋™ ์—ฐ๊ฒฐ


๐Ÿ”ณ 2. Bottom Tab Navigation

ํ•˜๋‹จ ํƒญ ๋„ค๋น„๊ฒŒ์ด์…˜ (SNS ์•ฑ์—์„œ ์ž์ฃผ ๋ณด์ด๋Š” ํ˜•ํƒœ)

import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

const Tab = createBottomTabNavigator();

function MainTab() {
  return (
    <Tab.Navigator>
      <Tab.Screen name="Feed" component={FeedScreen} />
      <Tab.Screen name="Profile" component={ProfileScreen} />
    </Tab.Navigator>
  );
}

โœ… ํ•˜๋‹จ UI๋กœ ํƒญ ๊ตฌ์„ฑ
โœ… ์•„์ด์ฝ˜ ์ถ”๊ฐ€ ์‹œ react-native-vector-icons ๋˜๋Š” @expo/vector-icons ์‚ฌ์šฉ


๐Ÿ“‚ 3. Drawer Navigation

์‚ฌ์ด๋“œ ๋ฉ”๋‰ด. ํ–„๋ฒ„๊ฑฐ ๋ฒ„ํŠผ์œผ๋กœ ์—ด๋ฆฌ๋Š” ๋ฉ”๋‰ด ๊ตฌ์กฐ

import { createDrawerNavigator } from '@react-navigation/drawer';

const Drawer = createDrawerNavigator();

function AppDrawer() {
  return (
    <Drawer.Navigator>
      <Drawer.Screen name="Home" component={HomeScreen} />
      <Drawer.Screen name="Settings" component={SettingsScreen} />
    </Drawer.Navigator>
  );
}

โœ… ๊ด€๋ฆฌ์ž ์•ฑ, ์„ค์ • ํŽ˜์ด์ง€ ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋จ
โœ… react-native-gesture-handler ํ•„์ˆ˜


๐Ÿ”€ ์ค‘์ฒฉ ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌ์กฐ ์˜ˆ์‹œ

// Tab ์•ˆ์— Stack ๊ตฌ์กฐ

<Tab.Navigator>
  <Tab.Screen name="HomeStack" component={HomeStack} />
  <Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>

function HomeStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Detail" component={DetailScreen} />
    </Stack.Navigator>
  );
}

โœ… ์‹ค๋ฌด์—์„œ๋Š” Stack ์•ˆ์— Tab, ํ˜น์€ Tab ์•ˆ์— Stack
โ†’ ์ด๋Ÿฐ ์ค‘์ฒฉ์ด ๋งค์šฐ ํ”ํ•˜๋‹ค!


๐Ÿ“ ์‹ค๋ฌด ํŒ

  • ํ™”๋ฉด๋ช…์€ ๊ณ ์œ ํ•˜๊ฒŒ ๊ด€๋ฆฌ (name="Feed" โ†’ ์ค‘๋ณต ๊ธˆ์ง€)
  • navigation prop์€ useNavigation() ํ›…์œผ๋กœ ์‚ฌ์šฉ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ ์‹œ @react-navigation/native์˜ ParamList ์ •์˜ ํ•„์š”
  • iOS์™€ Android์—์„œ ๋’ค๋กœ๊ฐ€๊ธฐ ๋™์ž‘์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ

๐Ÿ“ ๋‚ด๊ฐ€ ๋А๋‚€ ์ 

์›น์—์„  Link, Router, push() ์ •๋„๋งŒ ์‹ ๊ฒฝ ์“ฐ๋ฉด ๋๋Š”๋ฐ
React Native๋Š” ๊ธฐ๊ธฐ๋งˆ๋‹ค ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๊ณ 
์‚ฌ์šฉ์ž ๊ธฐ๋Œ€ UX๋„ ๋‹ฌ๋ผ์„œ ํ›จ์”ฌ ์‹ ๊ฒฝ ์จ์•ผ ํ•  ๊ฒŒ ๋งŽ์•˜๋‹ค.

ํ•˜์ง€๋งŒ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด
์˜คํžˆ๋ ค โ€œStack โ†’ Tab โ†’ Modal โ†’ Drawerโ€๊นŒ์ง€
๋ช…ํ™•ํ•˜๊ฒŒ ๊ณ„์ธต์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์–ด์„œ
๋” ๊น”๋”ํ•˜๊ณ  ์œ ์—ฐํ•œ ์•ฑ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


๐Ÿงญ "๊ธธ์„ ์žƒ์ง€ ์•Š์œผ๋ ค๋ฉด, ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌ์กฐ๋ถ€ํ„ฐ ์„ค๊ณ„ํ•˜์ž."


profile
๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์ค€๋น„ ์ค‘ ์ด๋ฉฐ, ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘ ์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€