Как узнать название текущего маршрута в реагирующей навигации?

Мне нужно имя текущего маршрута или экрана в реагирующей навигации, которое я хочу использовать внутри условия, чтобы внести некоторые изменения.

Ответ 1

Вы можете поймать его как следующий код:

this.props.navigation.state.routeName

Ответ 2

При использовании "react-navigation": "^3.0.8" и DrawerNavigator к нему можно получить доступ из объекта this.props.activeItemKey используя this.props.activeItemKey

Ответ 3

Если вы используете вложенные навигаторы, вы можете использовать этот код, чтобы получить текущее активное состояние экрана

const getActiveRouteState = function (route: NavigationState): NavigationState {
    if (!route.routes || route.routes.length === 0 || route.index >= route.routes.length) {
        return route;
    }

    const childActiveRoute = route.routes[route.index] as NavigationState;
    return getActiveRouteState(childActiveRoute);
}

Использование:

const activeRoute = getActiveRouteState(this.props.navigation.state);

Я использую это, когда мне нужно получить текущее активное состояние экрана из NavigationDrawer.

Ответ 4

У меня есть несколько TabNavigator, вложенных в BottomTabNavigator. Я получаю текущий маршрут TabNavigator с помощью:

    const pathAndParams = props.navigation.router.getPathAndParamsForState(props.navigation.state) || {}
    const activePath = pathAndParams.path

Ответ 6

Приготовление

зарегистрируйтесь NavigationService, подробности см. в Навигация без навигационной стойки

<App
  ref={navigatorRef => {
        NavigationService.setTopLevelNavigator(navigatorRef);
  }}
/>

функция рекурсии

function getCurrentRoute(nav){
    if(Array.isArray(nav.routes)&&nav.routes.length>0){
        return getCurrentRoute(nav.routes[nav.index])
    }else {
        return nav.routeName
    }
}

получить текущее имя маршрута

getCurrentRoute(NavigationService.getNavigator().state.nav)