当前位置: 首页 > news >正文

React Navigation 核心使用(Stack/Tab/Drawer)

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-context

Stack:

npm install @react-navigation/native-stack

Bottom Tabs:

npm install @react-navigation/bottom-tabs

Drawer:

npm install @react-navigation/drawer

2. 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 └─ Mine

Tab 放 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 商业项目中最常见、最稳定的导航架构。

http://www.jsqmd.com/news/1245514/

相关文章:

  • Grok for Excel:AI驱动的金融建模与数据分析实战指南
  • Grok大语言模型技术解析:架构特性与工程实践指南
  • 广州番禺区东环街道亨得利名表服务中心电话公示(2026年7月最新) - 亨得利官方博客
  • Win11桌面没有此电脑/我的电脑?不只桌面图标设置一种方法(6种专业设置随便选)
  • 蓝凌EKP18产品:整体架构
  • 微控制器外设电源管理:PCx寄存器原理与低功耗实战
  • 成人职业培训机构招生黑洞:SaaS系统选错一次学员流失率飙升30%
  • FlexRay中断使能与TCR配置实战:汽车电子高可靠通信核心机制解析
  • 掌握Linux服务管理:systemd全面指南
  • Qwen3.8 Max响应速度优化:从模型量化到生成参数调优实战
  • 2026年7月最新芝柏重庆大悦城维修保养服务电话 - 亨得利官方服务中心
  • 2026年语音识别准确率低推荐3个专业挑选标准帮你选对工具
  • 暑期狂欢,畅玩一夏!ToDesk远程游戏功能无门槛使用介绍
  • VC++与ObjectARX实现AutoCAD机械版标题栏数据自动化读写
  • 使用de4dot与dnSpy进行.NET程序集反混淆与逆向分析实战指南
  • 《如何搭建:“数字人宣讲视频 + Flask 展示页”的演示系统》
  • DIV+CSS跨浏览器兼容性解决方案全解析
  • 武汉武昌区积玉桥街道亨得利名表服务中心电话公示(2026年7月最新) - 亨得利官方
  • ARM Cortex-M外设识别寄存器原理与TM4C123 UART/SSI实战应用
  • RAG-Anything(LightRAG 内核)完整调优实践指南
  • Linux 7.2内核图形性能实测:帧率最高提升12% 光线追踪提升1%
  • 亲身到店体验合肥亨得利名表服务中心|电话和详细网点地址(2026年7月更新) - 亨得利官方
  • Photoshop绘画新手避坑指南与实战技巧
  • 分布式训练避坑指南:在多卡环境下稳定训练大模型的技巧
  • 2026年7月雅典最新通告:南通地区客户售后热线与网点地址指引 - 亨得利官方服务中心
  • Claude Team计划调整:AI编程助手如何提升中小团队开发效率
  • Linux的几个简单命令
  • OpenAI API 100美元免费额度:开发者领取使用全攻略
  • Claude Mythos 5分布式代码分析技术解析与应用
  • 智能驾驶(L2)相关法规以及标准