在反应导航中禁用后退按钮

新手上路,请多包涵

我正在使用反应原生导航(react-navigation)StackNavigator。它从登录页面开始,贯穿应用程序的整个生命周期。我不想有返回选项,返回登录屏幕。有谁知道登录屏幕后如何将其隐藏在屏幕上?顺便说一句,我还使用以下方法将其隐藏在登录屏幕中:

 const MainStack = StackNavigator({
  Login: {
    screen: Login,
    navigationOptions: {
      title: "Login",
      header: {
        visible: false,
      },
    },
  },
  // ... other screens here
})

原文由 EyalS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

1)使后退按钮在反应导航中消失

v5 或更新版本

 {
    navigationOptions:  {
    title: 'MyScreen',
    headerLeft: ()=> null,
    // `headerLeft: undefined` should work too
    // `headerLeft: null` should work but could trigger a TS error
}

注意: v6 有一个额外的选项: headerBackVisible: false

返回按钮是否在标题中可见。如果您指定了它,您可以使用它在 headerLeft 旁边显示一个后退按钮。

https://reactnavigation.org/docs/native-stack-navigator/#headerbackvisible

v2-v4:

 navigationOptions:  {
    title: 'MyScreen',
    headerLeft: null
}

2)如果要清理导航堆栈:

假设您在要从中导航的屏幕上:

如果您使用 react-navigation v5 或更新版本,您可以使用 navigation.resetCommonActions.reset

  // Replace current navigation state with a new one,
 // index value will be the current active route:

navigation.reset({
  index: 0,
  routes: [{ name: 'Profile' }],
});

来源和更多信息: https ://reactnavigation.org/docs/navigation-prop/#reset

或者:

 navigation.dispatch(
  CommonActions.reset({
    index: 1,
    routes: [
      { name: 'Home' },
      {
        name: 'Profile',
        params: { user: 'jane' },
      },
    ],
  })
);

来源和更多信息: https ://reactnavigation.org/docs/navigation-actions/#reset

对于旧版本的 react-navigation:

v2-v4 使用 StackActions.reset(...)

 import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0, // <-- currect active route from actions array
  actions: [
    NavigationActions.navigate({ routeName: 'myRouteWithDisabledBackFunctionality' }),
  ],
});

this.props.navigation.dispatch(resetAction);

v1 使用 NavigationActions.reset

3) 对于 android,您还必须使用 BackHandler 禁用硬件后退按钮

http://reactnative.dev/docs/backhandler.html

或者如果你想使用钩子:

https://github.com/react-native-community/hooks#usebackhandler

否则,如果导航堆栈为空,则应用程序将在按下 android 硬件后退按钮时关闭。

其他来源:感谢在下面添加评论并帮助更新 v5 的答案的用户。

原文由 Florin Dobre 发布,翻译遵循 CC BY-SA 4.0 许可协议

您是否考虑过使用 this.props.navigation.replace( "HomeScreen" ) 而不是 this.props.navigation.navigate( "HomeScreen" )

这样你就不会向堆栈添加任何东西。因此,如果在 Android 中按下后退按钮或在 IOS 中向右滑动屏幕,HomeScreen 将不会挥动任何要返回的内容。

更多信息请查看 文档。当然,您可以通过在 navigationOptions headerLeft: null 来隐藏后退按钮

原文由 Tarik Chakur 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题