Navigation Patterns
Learn common navigation patterns using Rott UI components with React Navigation.
Bottom Tab Navigation
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { BottomMenu } from '@tansuk/rott-ui';
const Tab = createBottomTabNavigator();
function AppNavigator() {
return (
<Tab.Navigator
tabBar={(props) => {
const menuItems = props.state.routes.map((route, index) => ({
icon: { name: getIconForRoute(route.name) },
title: route.name,
onPress: () => props.navigation.navigate(route.name),
}));
return <BottomMenu menuItems={menuItems} />;
}}
>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Search" component={SearchScreen} />
<Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>
);
}
Stack Navigation with Header
import { createStackNavigator } from '@react-navigation/stack';
import { Container, Header, Content } from '@tansuk/rott-ui';
const Stack = createStackNavigator();
function ScreenWithHeader({ navigation }) {
return (
<Container noPadding>
<Header
title="Screen Title"
leftIcon={[
{ name: 'ARROW_LEFT', onPress: () => navigation.goBack() },
]}
rightIcon={[
{ name: 'SEARCH', onPress: () => navigation.navigate('Search') },
]}
/>
<Content flex={1}>
{/* Content */}
</Content>
</Container>
);
}
function AppNavigator() {
return (
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="Home" component={ScreenWithHeader} />
</Stack.Navigator>
);
}
Tab Widget Navigation
import { TabWidget } from '@tansuk/rott-ui';
function ProductScreen() {
return (
<Container noPadding>
<Header title="Product Details" />
<TabWidget
titles={['Overview', 'Specs', 'Reviews']}
tabs={[
<OverviewTab />,
<SpecsTab />,
<ReviewsTab />,
]}
/>
</Container>
);
}
Drawer Navigation
import { createDrawerNavigator } from '@react-navigation/drawer';
const Drawer = createDrawerNavigator();
function DrawerContent({ navigation }) {
return (
<Content flex={1}>
<CommonItemContainer>
<CommonItem
title="Home"
leftIcon="HOME"
onPress={() => navigation.navigate('Home')}
/>
<CommonItem
title="Settings"
leftIcon="SETTINGS"
onPress={() => navigation.navigate('Settings')}
/>
<CommonItem
title="Logout"
leftIcon="EXIT"
onPress={handleLogout}
/>
</CommonItemContainer>
</Content>
);
}
function AppNavigator() {
return (
<Drawer.Navigator drawerContent={(props) => <DrawerContent {...props} />}>
<Drawer.Screen name="Home" component={HomeScreen} />
</Drawer.Navigator>
);
}
Modal Navigation
function showModalScreen() {
Modal.showModal({
id: 'modal-screen',
fullScreen: true,
header: {
title: 'Modal Screen',
closeButton: true,
},
children: <ModalScreenContent />,
});
}
Best Practices
Do's ✅
- Use consistent header patterns across screens
- Provide clear back navigation
- Use appropriate navigation types for context
- Handle deep linking properly
- Test navigation flows thoroughly
Don'ts ❌
- Don't nest too many navigation levels
- Don't forget to handle Android back button
- Don't use modals for primary navigation
- Don't block users from going back