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

Juk*_*uko 4 javascript reactjs react-native react-navigation

我拼命地寻找一种可能性,以检查ReactNavigation中是否存在先前的屏幕。

使用this.props.navigation.goBack()收益false,如果没有以前的路由存在,但我不能使用它,因为如果以前的路由存在我重定向。

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

谢谢。我没有使用Redux。这样会使这些东西变得更容易,但是我现在想避免使用它。

Thé*_*dvn 8

可能的解决方案(不确定是否是最好的解决方案)是在上一个屏幕的param对象中花费。这样,如果存在参数将意味着存在先前的屏幕。

例如:

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

  params: { previous_screen: 'CURRENT_SCREEN' },

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

this.props.navigation.dispatch(navigateAction);
Run Code Online (Sandbox Code Playgroud)

然后在下一个屏幕中:

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


nwa*_*les 7

有一个更简单的方法:

if(this.props.navigation.isFirstRouteInParent()) {
    //a previous screen does not exist
} else {
    //a previous screen does exist
}
Run Code Online (Sandbox Code Playgroud)


cop*_*fox 6

从 React Navigation 5 开始,您可以通过useNavigationState这种方式在功能组件中使用钩子:

const routesLength = useNavigationState(state => state.routes.length);
console.log('routesLength', routesLength);
Run Code Online (Sandbox Code Playgroud)

如果routesLength> 1 那么它不是堆栈中的第一个屏幕

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