Мне нужно имя текущего маршрута или экрана в реагирующей навигации, которое я хочу использовать внутри условия, чтобы внести некоторые изменения.
Как узнать название текущего маршрута в реагирующей навигации?
Ответ 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
Ответ 5
Прочитайте документацию для этого здесь: Отслеживание экрана
Ответ 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)