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);