Javascript 反应导航检查是否存在上一个屏幕

Javascript 反应导航检查是否存在上一个屏幕,javascript,reactjs,react-native,react-navigation,Javascript,Reactjs,React Native,React Navigation,我正在拼命寻找一种可能性,以检查是否有一个以前的屏幕上存在的导航 使用this.props.navigation.goBack()返回false如果以前的路由不存在,但我不能使用它,因为如果以前的路由存在,我会被重定向 是否有可能检查我是否打开了应用程序,而不是从另一个屏幕导航到主屏幕 多谢各位。我没有使用Redux。这将使这些东西更容易,但我现在想避免使用它 解决方案(不确定是不是最好的)是在上一个屏幕的param对象中花费时间。这样,如果参数存在,则表示存在上一个屏幕 例如: const n

我正在拼命寻找一种可能性,以检查是否有一个以前的屏幕上存在的导航

使用
this.props.navigation.goBack()
返回
false
如果以前的路由不存在,但我不能使用它,因为如果以前的路由存在,我会被重定向

是否有可能检查我是否打开了应用程序,而不是从另一个屏幕导航到主屏幕

多谢各位。我没有使用Redux。这将使这些东西更容易,但我现在想避免使用它

解决方案(不确定是不是最好的)是在上一个屏幕的param对象中花费时间。这样,如果参数存在,则表示存在上一个屏幕

例如:

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

  params: { previous_screen: 'CURRENT_SCREEN' },

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

this.props.navigation.dispatch(navigateAction);
然后在下一个屏幕中:

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

有一个更简单的方法:

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

这对我完全有效。。。。 如果您想从react native app中的导航堆栈中查找以前的路线/屏幕名称,则可以使用此功能

export const previousRouteName = (navigation) =>{
  let navRoutes = navigation.dangerouslyGetParent().state.routes;
  if (navRoutes.length >= 2){
    return navRoutes[navRoutes.length - 2].routeName
  }
  return navigation.state.routeName
}
如何使用?

previousRouteName(props.navigation);

希望您喜欢并帮助您(K00L;)

从React Navigation 5开始,您可以通过以下方式在功能组件内部使用
useNavigationState
hook:

const routesLength=useNavigationState(state=>state.routes.length);
console.log('routesLength',routesLength);
如果
routesLength
>1,则它不是堆栈中的第一个屏幕


或者您可以使用
navigation.canGoBack()

请简要解释这段代码。您可能已经回答了这个问题,但一些关于您如何回答的评论将对未来的读者有益。此解决方案在大多数情况下都足够好,但是,如果我需要将第一条路由推送到堆栈中,而不是返回到?
navigation.canGoBack()
可以正常工作!!!!谢谢
previousRouteName(props.navigation);