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

升级react-navigation v6后遇同名嵌套屏幕报错求助

解决React Navigation v6升级后"同名嵌套屏幕"崩溃问题

问题核心

React Navigation v6对屏幕名称的唯一性要求比v5严格得多,不允许任何嵌套层级下出现同名的屏幕——哪怕是不同导航容器(抽屉、栈、标签)里的屏幕,只要名称重复就会触发Found screens with the same name nested inside one another报错。你遇到的情况就是HomeBottom同时出现在AppSideDrawerScreen > HomeSide > HomeBottom和AppSideDrawerScreen > HomeSide > HomeBottom > HomeBottom路径中,导致冲突。

具体解决步骤

1. 停止使用route.name动态生成屏幕名称

你怀疑的点是对的,用route.name作为Screen的name属性很容易导致重复。直接给每个屏幕指定全局唯一的静态名称:

// 错误写法:依赖route.name可能导致重复
<HomeStack.Screen name={route.name} component={HomeBottom} />

// 正确写法:手动指定唯一名称
<HomeStack.Screen name="HomeBottomContainer" component={HomeBottom} />

2. 检查并修改所有嵌套的同名屏幕

遍历你的导航结构,找到所有重复的屏幕名称,逐一重命名:
比如原来HomeBottom组件内部的导航可能有这样的代码:

// 错误:内部屏幕和外层容器同名
const HomeBottom = () => (
  <Tab.Navigator>
    <Tab.Screen name="HomeBottom" component={HomeScreen} />
  </Tab.Navigator>
);

修改为:

// 正确:给内部屏幕指定唯一名称
const HomeBottom = () => (
  <Tab.Navigator>
    <Tab.Screen name="HomeMainContent" component={HomeScreen} />
  </Tab.Navigator>
);

3. 确保所有屏幕名称全局唯一

不管是抽屉导航、栈导航还是标签导航里的屏幕,name属性必须在整个导航结构里没有重复。比如:

  • 抽屉里的屏幕叫HomeSideContainer
  • 栈里的容器屏幕叫HomeBottomContainer
  • 标签里的内容屏幕叫HomeMainContent
    这样层级清晰且不会重名。

验证修改

完成上述调整后,重新运行应用,报错应该会消失。如果还有问题,检查导航结构的每个层级,确保没有遗漏的同名屏幕——v6会严格校验所有嵌套路径的屏幕名称唯一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:25:38