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

React Navigation v6抽屉嵌套Stack导航出现双头部该如何修复?

问题原因

React Navigation v6 中嵌套的导航器默认都会开启自身头部的显示,你当前的导航结构是抽屉导航(Drawer)嵌套了两个独立的 NativeStack 导航,两个层级的导航器都渲染了头部,所以会出现重复的两个导航头。v5 和 v6 的头部默认配置存在差异,这就是你跟着 v5 教程写 v6 代码无法复现效果的原因。

修复方案

你可以根据自己的产品需求选择以下任意一种方案:

方案1:保留子Stack导航的头部,隐藏Drawer导航的头部(推荐)

这个方案适合子Stack内部页面跳转时需要头部自动变化(比如进入详情页自动显示返回按钮)的场景,也是嵌套导航的常用方案,只需给 Drawer 全局添加隐藏头部的配置即可:

export default function App() {
  return (
    <NavigationContainer>
      {/* 全局配置Drawer所有页面隐藏头部,也可以单独给每个Drawer.Screen的options属性加headerShown: false */}
      <Drawer.Navigator screenOptions={{ headerShown: false }}>
        <Drawer.Screen name="Home" component={HomeScreenStack} />
        {/* 额外优化:原来的第二个Drawer.Screen命名和子Stack内的路由重名了,修改为Archived避免后续跳转冲突 */}
        <Drawer.Screen name="Archived" component={ArchivedScreenStack} />
      </Drawer.Navigator>
    </NavigationContainer>
  );
}

方案2:保留Drawer的头部,隐藏子Stack导航的头部

这个方案适合仅需要全局统一的抽屉头部,子页面不需要单独控制头部的场景,只需给两个子Stack导航添加隐藏头部的配置即可:

// 给Home的Stack导航加隐藏头部配置
const HomeScreenStack = ({ navigation }) => {
  return (
    <StackHome.Navigator screenOptions={{ headerShown: false }}>
      <StackHome.Screen name="Home" component={HomeScreen} />
      <StackHome.Screen name="NotesDetails" component={NotesDetails} />
    </StackHome.Navigator>
  );
};

// 给归档的Stack导航加隐藏头部配置
const ArchivedScreenStack = ({ navigation }) => {
  return (
    <StackArchived.Navigator screenOptions={{ headerShown: false }}>
      <StackArchived.Screen name="Home" component={Archived} />
    </StackArchived.Navigator>
  );
};

内容的提问来源于stack exchange,提问作者Kamran Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:06:03