You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Expo Router V2中嵌套Stack Navigation到Tab Navigation?

在Tab导航的设置页中嵌套Stack导航(保留底部Tab)

要实现这个需求,核心是导航嵌套——将Stack导航作为Tab导航中「设置」标签页的子容器。这样从设置页跳转到它的子页面时,底部Tab导航栏会始终保留在屏幕底部。以下是基于React Navigation 6.x(当前主流版本)的具体实现步骤:

1. 安装必要依赖

npm install @react-navigation/native @react-navigation/bottom-tabs @react-navigation/native-stack
# 若使用Expo,额外安装原生依赖
expo install react-native-screens react-native-safe-area-context

2. 创建设置页的Stack导航

先定义设置页及其子页面的Stack容器,比如包含「设置主页」「个人资料设置」「通知设置」:

import { createNativeStackNavigator } from '@react-navigation/native-stack';
import SettingsScreen from '../screens/SettingsScreen';
import ProfileSettingsScreen from '../screens/ProfileSettingsScreen';
import NotificationSettingsScreen from '../screens/NotificationSettingsScreen';

const Stack = createNativeStackNavigator();

function SettingsStack() {
  return (
    <Stack.Navigator>
      {/* 栈的初始页面为设置主页 */}
      <Stack.Screen 
        name="SettingsHome" 
        component={SettingsScreen} 
        options={{ title: '设置' }} 
      />
      <Stack.Screen 
        name="ProfileSettings" 
        component={ProfileSettingsScreen} 
        options={{ title: '个人资料' }} 
      />
      <Stack.Screen 
        name="NotificationSettings" 
        component={NotificationSettingsScreen} 
        options={{ title: '通知设置' }} 
      />
    </Stack.Navigator>
  );
}

3. 创建底部Tab导航并嵌套Stack

将上述SettingsStack作为Tab导航中「设置」项的屏幕组件:

import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import HomeScreen from '../screens/HomeScreen';
import SearchScreen from '../screens/SearchScreen';
import { SettingsStack } from './SettingsStack';

const Tab = createBottomTabNavigator();

function MainTabNavigator() {
  return (
    <Tab.Navigator>
      <Tab.Screen 
        name="Home" 
        component={HomeScreen} 
        options={{ title: '首页' }} 
      />
      <Tab.Screen 
        name="Search" 
        component={SearchScreen} 
        options={{ title: '搜索' }} 
      />
      {/* 用SettingsStack替代单个SettingsScreen */}
      <Tab.Screen 
        name="Settings" 
        component={SettingsStack} 
        options={{ title: '设置' }} 
      />
    </Tab.Navigator>
  );
}

4. 在根组件中渲染导航容器

import { NavigationContainer } from '@react-navigation/native';
import { MainTabNavigator } from './MainTabNavigator';

export default function App() {
  return (
    <NavigationContainer>
      <MainTabNavigator />
    </NavigationContainer>
  );
}

5. 在设置页内跳转子页面

在SettingsScreen中,通过navigation对象跳转至Stack内的子页面:

import { View, Button } from 'react-native';

function SettingsScreen({ navigation }) {
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', gap: 16 }}>
      <Button 
        title="修改个人资料" 
        onPress={() => navigation.navigate('ProfileSettings')} 
      />
      <Button 
        title="通知设置" 
        onPress={() => navigation.navigate('NotificationSettings')} 
      />
    </View>
  );
}

关键说明

  • 嵌套层级为NavigationContainer → TabNavigator → SettingsStack → 具体屏幕,确保Stack的所有页面都在Tab导航上下文下渲染,底部Tab不会消失。
  • 若需隐藏Stack在Tab页内的默认头部,可给Stack.Navigator添加screenOptions={{ headerShown: false }},再自定义页面内的头部组件。
  • 可通过Tab.Screen的options配置Tab的图标、样式等,Stack的页面样式则通过Stack.Screen的options单独设置。

内容的提问来源于stack exchange,提问作者Rene Kutter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:55:09