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

嵌套导航获取活跃路由名称:无法获取HomeStack内屏幕路由名

解决嵌套React Navigation栈中无法获取深层路由名称的问题

你的问题出在getFocusedRouteNameFromRoute默认只会读取当前路由直接子层级的聚焦路由,当路由结构是多层嵌套(RootStack > TabNavigation > HomeStack > 首页屏幕)时,直接在TabNavigation或RootStack层级调用该方法,只能拿到HomeStack这个栈路由的名称,无法穿透到内部的屏幕。

以下是两种可行的解决方法:

方法一:在Tab导航的屏幕配置中获取深层路由

在定义TabNavigator时,给HomeStack这个屏幕的options配置传入函数,通过当前route参数直接获取HomeStack内部的聚焦路由名称:

import { getFocusedRouteNameFromRoute } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

const Tab = createBottomTabNavigator();

function TabNavigation() {
  return (
    <Tab.Navigator>
      <Tab.Screen
        name="HomeStack"
        component={HomeStack}
        options={({ route }) => {
          // 获取HomeStack内部的聚焦路由名,默认值设为你的首页屏幕名称
          const focusedRouteName = getFocusedRouteNameFromRoute(route) ?? '首页屏幕';
          // 这里可以根据路由名做自定义操作,比如设置Tab标题
          return { title: focusedRouteName };
        }}
      />
      {/* 其他Tab屏幕 */}
    </Tab.Navigator>
  );
}

方法二:递归获取深层聚焦路由名称

如果需要在任意层级获取最底层的屏幕路由名,可以写一个递归函数,逐层遍历嵌套路由的state,直到找到没有子路由的屏幕:

import { useRoute, getFocusedRouteNameFromRoute } from '@react-navigation/native';

// 递归获取深层聚焦路由名
const getDeepFocusedRouteName = (route) => {
  const currentFocusedName = getFocusedRouteNameFromRoute(route);
  // 如果当前路由是嵌套栈(存在state),继续递归查找内部聚焦路由
  if (currentFocusedName && route.state) {
    const focusedSubRoute = route.state.routes[route.state.index];
    return getDeepFocusedRouteName(focusedSubRoute);
  }
  // 返回最终的屏幕路由名,或默认值
  return currentFocusedName ?? '默认屏幕';
};

// 使用示例
const RouteName = () => {
  const route = useRoute();
  return getDeepFocusedRouteName(route);
};

额外提示

  • 确保所有嵌套栈中的屏幕都正确设置了name属性,这是路由名称识别的基础;
  • 如果你的RouteName组件是直接放在HomeStack内部的屏幕中,无需复杂操作,直接通过useRoute().name就能拿到当前屏幕的路由名。

内容的提问来源于stack exchange,提问作者Munyaneza Ishimwe Peace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:03:30