RN导航与路由

在 React Native(RN)中,"导航与路由"通常指页面之间的跳转和页面栈管理。当前最主流的方案是:

官方推荐的社区导航库:

React Navigation 官网

安装:

java 复制代码
npm install @react-navigation/native

npm install react-native-screens react-native-safe-area-context

npm install @react-navigation/native-stack

1. Stack(栈导航)

适用于:

  • 登录 → 首页
  • 首页 → 详情页
  • 类似浏览器前进后退

示例:

javascript 复制代码
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';

const Stack = createNativeStackNavigator();

function HomeScreen({ navigation }) {
  return (
    <Button
      title="进入详情页"
      onPress={() =>
        navigation.navigate('Detail', { id: 1001 })
      }
    />
  );
}

function DetailScreen({ route }) {
  return (
    <Text>ID: {route.params.id}</Text>
  );
}

export default function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen
          name="Home"
          component={HomeScreen}
        />
        <Stack.Screen
          name="Detail"
          component={DetailScreen}
        />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

跳转:

arduino 复制代码
navigation.navigate('Detail');

返回:

ini 复制代码
navigation.goBack();

2. Tab(底部导航)

适用于:

  • 微信
  • 抖音
  • 电商首页

安装:

bash 复制代码
npm install @react-navigation/bottom-tabs

示例:

javascript 复制代码
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

const Tab = createBottomTabNavigator();

function App() {
  return (
    <NavigationContainer>
      <Tab.Navigator>
        <Tab.Screen name="首页" component={HomeScreen} />
        <Tab.Screen name="我的" component={ProfileScreen} />
      </Tab.Navigator>
    </NavigationContainer>
  );
}

效果:

复制代码
┌─────────────┐
│     内容     │
├─────────────┤
│ 首页 | 我的  │
└─────────────┘

3. Drawer(侧边栏导航)

适用于:

  • 管理后台
  • 菜单抽屉

安装:

bash 复制代码
npm install @react-navigation/drawer

示例:

javascript 复制代码
import { createDrawerNavigator } from '@react-navigation/drawer';

const Drawer = createDrawerNavigator();

function App() {
  return (
    <NavigationContainer>
      <Drawer.Navigator>
        <Drawer.Screen name="首页" component={HomeScreen} />
        <Drawer.Screen name="设置" component={SettingScreen} />
      </Drawer.Navigator>
    </NavigationContainer>
  );
}

4. 路由参数传递

发送参数:

php 复制代码
navigation.navigate('Detail', {
  id: 1001,
  title: '商品详情'
});

接收参数:

javascript 复制代码
function DetailScreen({ route }) {
  const { id, title } = route.params;

  return (
    <Text>{title}</Text>
  );
}

5. 嵌套路由

实际项目常见结构:

markdown 复制代码
RootStack
├── Login
└── MainTabs
    ├── Home
    ├── Message
    └── Mine

示例:

ini 复制代码
<Stack.Navigator>
  <Stack.Screen
    name="Main"
    component={TabNavigator}
  />
  <Stack.Screen
    name="Detail"
    component={DetailScreen}
  />
</Stack.Navigator>

从 Tab 页面直接跳详情:

arduino 复制代码
navigation.navigate('Detail');

6. TypeScript 路由类型

推荐在 RN 项目中使用:

ini 复制代码
export type RootStackParamList = {
  Home: undefined;
  Detail: {
    id: number;
  };
};

页面:

ini 复制代码
type Props = NativeStackScreenProps<
  RootStackParamList,
  'Detail'
>;

这样可以获得:

  • 路由名称提示
  • 参数类型检查
  • 自动补全

React Native 导航方案对比

方案 推荐度 特点
React Navigation ⭐⭐⭐⭐⭐ 社区主流,功能完整
Expo Router ⭐⭐⭐⭐⭐ 文件路由,类似 Next.js
React Native Navigation ⭐⭐⭐⭐ 原生性能更强,配置复杂
Wix Navigation ⭐⭐⭐⭐ 大型应用常用
相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端