
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
const Stack = createStackNavigator();
function StackNav() {
return (
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
);
}
const Tab = createBottomTabNavigator();
function TabNav() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>
);
}
const Drawer = createDrawerNavigator();
function DrawerNav() {
return (
<Drawer.Navigator>
<Drawer.Screen name="Home" component={HomeScreen} />
<Drawer.Screen name="Settings" component={SettingsScreen} />
</Drawer.Navigator>
);
}
const Stack = createStackNavigator();
const Tab = createBottomTabNavigator();
function TabNavigator() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>
);
}
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Main" component={TabNavigator} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
function App() {
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<NavigationContainer>
<Stack.Navigator>
{isLoggedIn ? (
<Stack.Screen name="Main" component={MainNavigator} />
) : (
<Stack.Screen name="Auth" component={AuthNavigator} />
)}
</Stack.Navigator>
</NavigationContainer>
);
}
export type RootStackParamList = {
Home: undefined;
Profile: { userId: string };
Settings: undefined;
};
type Props = StackNavigationProp<RootStackParamList, 'Home'>;
function HomeScreen() {
const navigation = useNavigation<StackNavigationProp<RootStackParamList>>();
return (
<Button
onPress={() => navigation.navigate('Profile', { userId: '123' })}
title="Go to Profile"
/>
);
}
// 기본 이동
navigation.navigate('Screen');
// 파라미터와 함께 이동
navigation.navigate('Screen', { id: 123 });
// 스택 초기화하며 이동
navigation.reset({
index: 0,
routes: [{ name: 'Screen' }],
});
// 현재 화면 교체
navigation.replace('Screen');
// 파라미터 전달
navigation.navigate('Profile', {
userId: '123',
name: 'John',
});
// 파라미터 사용
function ProfileScreen() {
const route = useRoute<RouteProp<ParamList, 'Profile'>>();
const { userId, name } = route.params;
return <Text>Profile of {name}</Text>;
}
화면이 중복으로 쌓이는 문제
navigate 대신 reset 또는 replace 사용네비게이션 액션이 무시되는 문제
타입 오류
// 스택 초기화 예시
navigation.reset({
index: 0,
routes: [{ name: 'Home' }],
});
// 조건부 렌더링 처리
useEffect(() => {
const timeout = setTimeout(() => {
navigation.navigate('Target');
}, 100);
return () => clearTimeout(timeout);
}, []);
React Navigation은 강력하지만 복잡할 수 있는 도구.
올바른 구조 설계와 타입 시스템 활용, 그리고 일반적인 문제들에 대한 이해를 통해 효과적으로 사용할 수 있음.
앱의 네비게이션 구조를 체계적으로 구축해야함.