React Navigation 是 React Native 中最主流的导航库。实际开发中,80% 以上的场景主要围绕三种导航器:
Stack Navigator(页面栈)
Bottom Tab Navigator(底部标签栏)
Drawer Navigator(侧边抽屉菜单)
1. 安装
React Navigation 7.x:
npm install @react-navigation/native npm install react-native-screens react-native-safe-area-contextStack:
npm install @react-navigation/native-stackBottom Tabs:
npm install @react-navigation/bottom-tabsDrawer:
npm install @react-navigation/drawer2. NavigationContainer
所有导航都必须放在 NavigationContainer 中:
import { NavigationContainer } from '@react-navigation/native'; export default function App() { return ( <NavigationContainer> {/* Navigator */} </NavigationContainer> ); }3. Stack Navigator
最常用。
适用于:
首页 ↓ 详情页 ↓ 详情页 ↓ 详情页像浏览器历史记录一样压栈。
创建
import { createNativeStackNavigator } from '@react-navigation/native-stack'; const Stack = createNativeStackNavigator();页面
function HomeScreen() { return null; } function DetailScreen() { return null; }注册路由
<Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Detail" component={DetailScreen} /> </Stack.Navigator>页面跳转
navigation.navigate('Detail');返回:
navigation.goBack();传递参数
发送:
navigation.navigate('Detail', { id: 1001, });接收:
function DetailScreen({ route }) { const { id } = route.params; return null; }替换页面
登录场景常见:
navigation.replace('Home');效果:
Login ↓ replace Home返回键不会回到 Login。
重置导航栈
退出登录:
navigation.reset({ index: 0, routes: [{ name: 'Login' }], });4. Bottom Tab Navigator
适用于:
首页 消息 发现 我的创建:
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; const Tab = createBottomTabNavigator();注册:
<Tab.Navigator> <Tab.Screen name="Home" component={HomeScreen} /> <Tab.Screen name="Profile" component={ProfileScreen} /> </Tab.Navigator>效果:
------------------ 首页 我的 ------------------设置图标
通常搭配:
npm install react-native-vector-icons<Tab.Screen name="Home" component={HomeScreen} options={{ tabBarIcon: ({ color, size }) => ( <Icon name="home" color={color} size={size} /> ), }} />Tab 配置
隐藏标题:
screenOptions={{ headerShown: false }}设置激活颜色:
screenOptions={{ tabBarActiveTintColor: '#007AFF', }}5. Drawer Navigator
适用于:
☰ 菜单 ├ 首页 ├ 用户中心 ├ 设置 └ 关于创建:
import { createDrawerNavigator } from '@react-navigation/drawer'; const Drawer = createDrawerNavigator();注册:
<Drawer.Navigator> <Drawer.Screen name="Home" component={HomeScreen} /> <Drawer.Screen name="Settings" component={SettingsScreen} /> </Drawer.Navigator>打开 Drawer
navigation.openDrawer();关闭:
navigation.closeDrawer();切换:
navigation.toggleDrawer();6. 组合导航(最重要)
实际项目不会单独使用。
典型结构:
App │ └─ Stack │ ├─ Login │ └─ MainTabs │ ├─ Home ├─ Message └─ MineTab 放 Stack 中
function MainTabs() { return ( <Tab.Navigator> <Tab.Screen name="Home" component={HomeScreen} /> <Tab.Screen name="Mine" component={MineScreen} /> </Tab.Navigator> ); }<Stack.Navigator> <Stack.Screen name="Login" component={LoginScreen} /> <Stack.Screen name="Main" component={MainTabs} /> </Stack.Navigator>7. TypeScript 类型定义
推荐项目一开始就配置。
export type RootStackParamList = { Home: undefined; Detail: { id: number; }; };创建:
const Stack = createNativeStackNavigator<RootStackParamList>();跳转获得类型提示:
navigation.navigate('Detail', { id: 100, });错误参数会直接报错。
8. 实际项目推荐结构
src ├── navigation │ ├── RootNavigator.tsx │ ├── StackNavigator.tsx │ ├── TabNavigator.tsx │ └── DrawerNavigator.tsx │ ├── screens │ ├── Home │ ├── Login │ ├── Detail │ └── Profile │ └── App.tsx常见组合模式:
NavigationContainer │ ▼ Stack ├── Login ├── Register └── Tabs ├── Home ├── Message └── Mine这是目前 React Native 商业项目中最常见、最稳定的导航架构。