
React Native ์ฑ์์ ํ๋ฉด ๊ฐ ์ด๋์ ์ฒ๋ฆฌํ๋ ค๋ฉด
React Navigation์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฑฐ์ ํ์ค์ฒ๋ผ ์ฌ์ฉํ๊ฒ ๋๋ค.
ํ์ง๋ง ์ฒ์์ ์ ํ๋ฉด Stack, Tab, Drawer๊ฐ ๋ญ๊ฐ ๋ค๋ฅด๊ณ , ์ด๋ป๊ฒ ์ค์ฒฉํ๋์ง
ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด๋ฒ ๊ธ์์๋ 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
ํ๋ฉด์ ์์์ฌ๋ฆฌ๋ ๊ตฌ์กฐ. ๊ฐ์ฅ ๊ธฐ๋ณธ
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: ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ์๋ ์ฐ๊ฒฐ
ํ๋จ ํญ ๋ค๋น๊ฒ์ด์ (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 ์ฌ์ฉ
์ฌ์ด๋ ๋ฉ๋ด. ํ๋ฒ๊ฑฐ ๋ฒํผ์ผ๋ก ์ด๋ฆฌ๋ ๋ฉ๋ด ๊ตฌ์กฐ
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" โ ์ค๋ณต ๊ธ์ง)useNavigation() ํ
์ผ๋ก ์ฌ์ฉ@react-navigation/native์ ParamList ์ ์ ํ์์น์์ Link, Router, push() ์ ๋๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๋๋ฐ
React Native๋ ๊ธฐ๊ธฐ๋ง๋ค ๋ค๋น๊ฒ์ด์
๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๊ณ
์ฌ์ฉ์ ๊ธฐ๋ UX๋ ๋ฌ๋ผ์ ํจ์ฌ ์ ๊ฒฝ ์จ์ผ ํ ๊ฒ ๋ง์๋ค.
ํ์ง๋ง ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ๋๋ฉด
์คํ๋ ค โStack โ Tab โ Modal โ Drawerโ๊น์ง
๋ช
ํํ๊ฒ ๊ณ์ธต์ ์ค๊ณํ ์ ์์ด์
๋ ๊น๋ํ๊ณ ์ ์ฐํ ์ฑ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
๐งญ "๊ธธ์ ์์ง ์์ผ๋ ค๋ฉด, ๋ค๋น๊ฒ์ด์ ๊ตฌ์กฐ๋ถํฐ ์ค๊ณํ์."