【问题标题】:BackHandler Navigation in Drawer Navigator and Main Stack Navigator in React Navigation抽屉导航器中的 BackHandler 导航和 React 导航器中的主堆栈导航器
【发布时间】:2020-03-23 21:30:36
【问题描述】:

我无法让 backHandler(Android 上的硬件后退按钮)与我的 Drawer 和 React-Navigation 上的 Stack Navigation 一起使用 后退按钮在主页屏幕上完美运行,但是一旦我导航到下一个屏幕,无论屏幕是在抽屉屏幕还是在堆栈中,它都会停止工作。 这是我的 Drawer 和 MainStackNavigator。

注意:将两者结合起来对我不起作用,因为它们都不是组件的一部分,我在我的应用程序中使用 redux

有人知道如何解决这个问题吗?

抽屉导航器

const DrawerNavigator = createDrawerNavigator(
  {
    Homep: Homepage,
    Home: HomeScreen,
    Shop: ShopScreen,
    Order: OrdersScreen,
    Wishlist: WishlistScreen,
    Search: SearchScreen,
    Profile: ProfileScreen,
    ShoppingBag: ShoppingBagScreen,


  },

MainStackNavigator


const MainStackNavigator = createStackNavigator(
  {
    Drawer: { screen: DrawerStackNavigator },
    CategoryProductGrid: { screen: CategoryProductGridScreen },
    Settings: { screen: SettingsScreen },
    Contact: { screen: ContactUsScreen },
    EditProfile: { screen: EditProfileScreen },
    ShippingAddress: { screen: ShippingAddressScreen },
    LocList: { screen: LocationList },
    ShippingMethod: { screen: ShippingMethodScreen },
    PaymentMethod: { screen: PaymentMethodScreen },
    AddACard: { screen: AddACardScreen },
    Checkout: { screen: CheckoutScreen },
    Bag: { screen: ShoppingBagScreen },


  },

我正在使用 BackHander 事件监听器,如下所示

  componentDidMount() {
    this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
  }

  componentWillUnmount() {
    this.backHandler.remove()
  }

  handleBackPress = () => {

    Alert.alert(
      'Exit App',
      'Exiting the application?',
      [
        {
          text: 'Cancel',
          onPress: () => console.log('Cancel Pressed'),
          style: 'cancel'
        },
        {
          text: 'OK',
          onPress: () => BackHandler.exitApp()
        }
      ],
      {
        cancelable: false
      }
    );
    return true;

  };

【问题讨论】:

    标签: android react-native react-redux react-navigation


    【解决方案1】:

    哇,经过一周的搜索和尝试不同的方式 解决方案非常简单,我不得不移动抽屉导航并将其全部放在 MainstackNavigator 下,这样返回硬件按钮才能正常工作

    【讨论】:

    • 我有同样的问题,但我不明白你的答案,请分享你的解决方案代码
    • @BeginnerProgrammer 在第一个位置,有注释“为什么不使用组件生命周期方法#首先,您可能倾向于使用 componentDidMount 订阅 back press 事件和 componentWillUnmount 取消订阅,或者使用 useEffect添加侦听器。这种方法不起作用 - 在导航生命周期中了解更多信息。" reactnavigation.org/docs/custom-android-back-button-handling/… 你不应该在生命周期方法中使用,上面显示的是什么情况
    猜你喜欢
    • 2018-12-09
    • 2020-11-27
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多