React Navigation์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ค๋น๊ฒ์ด์
ํ์
์ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์ด ์๊ธธ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Stack Navigation๊ณผ Drawer Navigation์ ๋์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ์ ์ํฉ์
๋๋ค.
์ด๋ ์ ์ฉํ ํ์
์ด CompositeNavigationProp
์ด ๊ธ์์๋ CompositeNavigationProp์ ๊ฐ๋
๊ณผ ์ฌ์ฉ๋ฒ์ ์ฝ๊ฒ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
CompositeNavigationProp์ ๋ ๊ฐ์ ๋ค๋น๊ฒ์ด์
ํ์
์ ์กฐํฉํด์ ํ๋์ navigation ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ์ ํธ๋ฆฌํฐ ํ์
์
๋๋ค.
๐ ์ ํ์ํ ๊น?
React Navigation์์๋ ํ๋ฉด์ ์ด๋ํ ๋ navigation.navigate()๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ฐ ๋ค๋น๊ฒ์ด์
ํ์
๋ง๋ค navigate ๋ฉ์๋๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค..
์๋ฅผ ๋ค์ด, StackNavigationProp์๋ openDrawer()๊ฐ ์๊ณ , DrawerNavigationProp์๋ goBack()์ด ์์ ์๋ ์์ต๋๋ค.
โก๏ธ ๊ทธ๋์ ๋ ๊ฐ์ ๋ค๋น๊ฒ์ด์
ํ์
์ ํฉ์ณ์ ํ๋์ navigation ๊ฐ์ฒด์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ CompositeNavigationProp์
๋๋ค.
Stack Navigation: ๋ก๊ทธ์ธ, ํ์๊ฐ์
, ๋ฉ์ธ ํ๋ฉด์ ๊ด๋ฆฌDrawer Navigation: ์ค์ ํ๋ฉด์ ๊ด๋ฆฌโก๏ธ ํ ํ๋ฉด์์ Stack๊ณผ Drawer์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด?
CompositeNavigationProp์ ํ์ฉํ๋ฉด ๋ฉ๋๋ค! ๐
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;
};
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()๋ฅผ ํ ๊ณณ์์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค! ๐
โ
Stack, Drawer, Bottom Tab์ ๋์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
โ
ํน์ ํ๋ฉด์์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋น๊ฒ์ด์
๊ธฐ๋ฅ์ ํจ๊ป ์ฌ์ฉํด์ผ ํ ๋
โ
navigation.navigate()๋ฅผ ์ฌ์ฉํ ๋ ํ์
์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์ถ์ ๋
โ ์ผํ(,)๋ฅผ ๋นผ๋จน์ผ๋ฉด ์ ๋จ!
// โ ์ค๋ฅ ๋ฐ์ (์ผํ ๋น ์ง)
type MyPageNavigationProp = CompositeNavigationProp<
StackNavigationProp<RootStackParamList, "Start">
StackNavigationProp<MyPageStackParamList>
>;
โ ์ฌ๋ฐ๋ฅธ ์ฝ๋ (์ผํ ์ถ๊ฐ!)
type MyPageNavigationProp = CompositeNavigationProp<
StackNavigationProp<RootStackParamList, "Start">,
StackNavigationProp<MyPageStackParamList>
>;
โก๏ธ ์ ๋ค๋ฆญ ํ์ ์ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ ์ผํ(,)๋ฅผ ๋ฃ์ด์ผ ํ๋ค!
์ด์ CompositeNavigationProp์ ํ์ฉํด์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋น๊ฒ์ด์
์ ์กฐํฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค! ๐
React Navigation์ ์ฌ์ฉํ ๋ Stack, Drawer, Tab ๋ฑ์ ์ ์ฐํ๊ฒ ๊ฒฐํฉํ๊ณ ์ถ๋ค๋ฉด CompositeNavigationProp์ ์ ๊ทน ํ์ฉํ๋ฉด ๋ฉ๋๋ค! ๐