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

React Navigation嵌套Bottom Tabs与Stack导航跳转失效求助

导航失效核心原因

你的代码存在3个直接导致跳转失败的问题:

  • 路由名不匹配:Stack中注册的提醒页路由名为AddLembrete,你在Plus组件中写的跳转目标是Lembrete,名称完全对不上,无法命中对应路由。
  • 嵌套导航作用域限制:Plus页面属于底部Tab导航器的内部页面,直接调用当前页面的navigation.navigate只会在Tab导航器自身的路由列表(Historico、Relatorios、Plus、Lembretes、Mais)里查找目标,找不到外层Stack中注册的Despesa、Serviço这类页面。
  • 无效事件绑定:React Native的原生View组件默认不响应onPress事件,你给estilos.linha2对应的View绑定的跳转回调永远不会触发。
修复方案
  1. 统一所有跳转的路由名,必须和Stack.Screen上的name属性完全一致,大小写、特殊字符都不能有偏差。
  2. 嵌套导航跳转外层路由时,先获取父级Stack导航器的实例再调用跳转方法,用getParent()获取父导航即可:
    // 在Tab内部页面获取外层Stack的navigation实例
    const stackNavigation = navigation.getParent()
    // 用父导航实例跳Stack下注册的页面
    stackNavigation.navigate('Despesa')
    
  3. 移除View上无效的onPress绑定,把跳转事件移到内部可点击的Box组件上,如果需要给整块View区域加点击效果,外层要包裹Pressable或者TouchableOpacity这类带点击响应能力的组件。
修正后的Plus组件核心代码
export default function Plus({ navigation }){
  // 提前获取外层Stack导航实例
  const stackNavigation = navigation.getParent()

  return (
    <TelaPlus style={estilos.tela}>
      <View style={estilos.linha1}>
        <Box onPress={()=> stackNavigation.navigate('Despesa')}> 
          <MaterialCommunityIcons name="elevation-decline" size={24} color="white" />
          <Texto>Despesa</Texto>
        </Box>
        
        <Box onPress={()=> stackNavigation.navigate('Serviço')}>
          <MaterialCommunityIcons name="car-wrench" size={24} color="white" />
          <Texto>Serviço</Texto>            
        </Box>
        
        <Box onPress={()=> stackNavigation.navigate('Receita')}>
          <MaterialCommunityIcons name="elevation-rise" size={24} color="white" />
          <Texto>Receita</Texto>           
        </Box>
      </View>

      <View style={estilos.linha2}>
        <Box style={estilos.box} onPress={()=> stackNavigation.navigate('AddLembrete')}>
          <MaterialCommunityIcons name="clock-plus-outline" size={24} color="white" />
          <Texto>Lembrete</Texto>            
        </Box>

        <Box onPress={()=> stackNavigation.navigate('Abastecimento')}>
          <MaterialCommunityIcons name="gas-station" size={24} color="white" />
          <Texto>Abastecimento</Texto>           
        </Box>
      </View>
    </TelaPlus>
  )
};

其他4个Tab页如果也需要跳Stack下的非Tab页面,统一用navigation.getParent()拿到父导航实例再做跳转,不要直接用Tab页自带的navigation跳外层路由,避免出现找不到路由的报错。

内容的提问来源于stack exchange,提问作者Jean Vitor Vieira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:51:22