๐Ÿ“Œ React Navigation - CompositeNavigationProp ๊ฐ€์ด๋“œ ๐Ÿš€

oversleepยท2025๋…„ 2์›” 21์ผ

app-development

๋ชฉ๋ก ๋ณด๊ธฐ
20/38

๋“ค์–ด๊ฐ€๋ฉฐ

React Navigation์„ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ž…์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, Stack Navigation๊ณผ Drawer Navigation์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ™์€ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

์ด๋•Œ ์œ ์šฉํ•œ ํƒ€์ž…์ด CompositeNavigationProp
์ด ๊ธ€์—์„œ๋Š” CompositeNavigationProp์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.


1๏ธโƒฃ CompositeNavigationProp๋ž€?

CompositeNavigationProp์€ ๋‘ ๊ฐœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ž…์„ ์กฐํ•ฉํ•ด์„œ ํ•˜๋‚˜์˜ navigation ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ์™œ ํ•„์š”ํ• ๊นŒ?
React Navigation์—์„œ๋Š” ํ™”๋ฉด์„ ์ด๋™ํ•  ๋•Œ navigation.navigate()๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ฐ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ž…๋งˆ๋‹ค navigate ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค..
์˜ˆ๋ฅผ ๋“ค์–ด, StackNavigationProp์—๋Š” openDrawer()๊ฐ€ ์—†๊ณ , DrawerNavigationProp์—๋Š” goBack()์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

โžก๏ธ ๊ทธ๋ž˜์„œ ๋‘ ๊ฐœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ž…์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ navigation ๊ฐ์ฒด์—์„œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒŒ CompositeNavigationProp์ž…๋‹ˆ๋‹ค.


2๏ธโƒฃ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๐Ÿ“ ์˜ˆ์ œ ์ƒํ™ฉ

  • Stack Navigation: ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๋ฉ”์ธ ํ™”๋ฉด์„ ๊ด€๋ฆฌ
  • Drawer Navigation: ์„ค์ • ํ™”๋ฉด์„ ๊ด€๋ฆฌ

โžก๏ธ ํ™ˆ ํ™”๋ฉด์—์„œ Stack๊ณผ Drawer์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?
CompositeNavigationProp์„ ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ๐Ÿš€


โœ… 1. ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ž… ์ •์˜

๋จผ์ €, Stack๊ณผ Drawer ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์ •์˜:

import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { DrawerNavigationProp } from "@react-navigation/drawer";
import { CompositeNavigationProp } from "@react-navigation/native";

// Stack Navigation ํƒ€์ž… ์ •์˜
type RootStackParamList = {
  Home: undefined;
  Details: { id: number };
};

// Drawer Navigation ํƒ€์ž… ์ •์˜
type DrawerParamList = {
  Main: undefined;
  Settings: undefined;
};

โœ… 2. CompositeNavigationProp ์‚ฌ์šฉํ•˜๊ธฐ

Stack๊ณผ Drawer ๋„ค๋น„๊ฒŒ์ด์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก CompositeNavigationProp์„ ์ ์šฉ:

import { useNavigation } from "@react-navigation/native";

// ๐ŸŸข ๋‘ ๊ฐœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ž…์„ ์กฐํ•ฉ!
type HomeScreenNavigationProp = CompositeNavigationProp<
  NativeStackNavigationProp<RootStackParamList, "Home">,
  DrawerNavigationProp<DrawerParamList>
>;

const HomeScreen = () => {
  const navigation = useNavigation<HomeScreenNavigationProp>();

  return (
    <View>
      {/* Stack Navigation ๊ธฐ๋Šฅ ์‚ฌ์šฉ */}
      <Button title="Go to Details" onPress={() => navigation.navigate("Details", { id: 1 })} />
      
      {/* Drawer Navigation ๊ธฐ๋Šฅ ์‚ฌ์šฉ */}
      <Button title="Open Drawer" onPress={() => navigation.openDrawer()} />
    </View>
  );
};

๐Ÿ“Œ useNavigation<HomeScreenNavigationProp>()์„ ์‚ฌ์šฉํ•˜๋ฉด navigation.navigate()์™€ navigation.openDrawer()๋ฅผ ํ•œ ๊ณณ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰


3๏ธโƒฃ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

โœ… Stack, Drawer, Bottom Tab์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
โœ… ํŠน์ • ํ™”๋ฉด์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ธฐ๋Šฅ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ
โœ… navigation.navigate()๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž… ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ


4๏ธโƒฃ ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ๋ถ€๋ถ„

โŒ ์‰ผํ‘œ(,)๋ฅผ ๋นผ๋จน์œผ๋ฉด ์•ˆ ๋จ!

// โŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (์‰ผํ‘œ ๋น ์ง)
type MyPageNavigationProp = CompositeNavigationProp<
  StackNavigationProp<RootStackParamList, "Start">
  StackNavigationProp<MyPageStackParamList>
>;

โœ… ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ (์‰ผํ‘œ ์ถ”๊ฐ€!)

type MyPageNavigationProp = CompositeNavigationProp<
  StackNavigationProp<RootStackParamList, "Start">,
  StackNavigationProp<MyPageStackParamList>
>;

โžก๏ธ ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์‰ผํ‘œ(,)๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค!


๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

์ด์ œ CompositeNavigationProp์„ ํ™œ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค! ๐Ÿš€
React Navigation์„ ์‚ฌ์šฉํ•  ๋•Œ Stack, Drawer, Tab ๋“ฑ์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด CompositeNavigationProp์„ ์ ๊ทน ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ๐Ÿ™Œ

profile
๊ถ๊ธˆํ•œ ๊ฒƒ, ํ–ˆ๋˜ ๊ฒƒ, ์‹œํ–‰์ฐฉ์˜ค ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

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