Skip to content Skip to sidebar Skip to footer

React Navigation Check If Previous Screen Exists

I am looking desperately for a possibility to check if a previous screen exists in ReactNavigation. Using this.props.navigation.goBack() returns false if no previous route exists,

Solution 1:

What could be a solution (not sure that it's the best one) would be to spend in the param object the previous screen. With that, if the params exists would mean that a previous screen exists.

For example:

const navigateAction = NavigationActions.navigate({
  routeName: 'Profile',

  params: { previous_screen: 'CURRENT_SCREEN' },

  action: NavigationActions.navigate({ routeName: 'NEXT_SCREEN' }),
});

this.props.navigation.dispatch(navigateAction);

And then in the next screen:

const { navigation } = this.props;
if (navigation.state.params && navigation.state.params.previous_screen) {
  // A previous screen exists
} else {
  // No previous screen
}

Solution 2:

There is an easier way:

if(this.props.navigation.isFirstRouteInParent()) {
    //a previous screen does not exist
} else {
    //a previous screen does exist
}

Solution 3:

As of React Navigation 5 you can use useNavigationState hook inside functional component this way:

const routesLength = useNavigationState(state => state.routes.length);
console.log('routesLength', routesLength);

If routesLength > 1 then it is not the first screen in stack

Or you can use navigation.canGoBack()

Solution 4:

const navigateAction = NavigationActions.navigate({
  routeName: 'NEXT_SCREEN',
  action: NavigationActions.navigate({ routeName: 'NEXT_SCREEN', params: { previous_screen: 'CURRENT_SCREEN' } }),
});
this.props.navigation.dispatch(navigateAction);

Solution 5:

It's completely working for me.... If you want to find out previous route/screen name from navigation stack in react native app so you can use this function.

exportconstpreviousRouteName = (navigation) =>{
  let navRoutes = navigation.dangerouslyGetParent().state.routes;
  if (navRoutes.length >= 2){
    return navRoutes[navRoutes.length - 2].routeName
  }
  return navigation.state.routeName
}

How to use?

previousRouteName(props.navigation);

Hope you like and helpful to you K00L ;)

Post a Comment for "React Navigation Check If Previous Screen Exists"