【问题标题】:react-native-router-flux backAndroidHandler not workingreact-native-router-flux backAndroidHandler 不起作用
【发布时间】:2019-08-16 15:12:30
【问题描述】:

我正在开发一个 react-native 移动应用程序,我使用过 react-native-router-flux 我有一个场景如下

1- Screen1
2- Screen2
3- Screen3
4- Screen4

当我在屏幕 4 上按下 android 后退按钮时,它会进入屏幕 3,然后是 2,然后是 1 但是当我在 screen1 上按下 android 后退按钮时,它应该退出应用程序,但它不起作用

这是我的路由器堆栈

<Router navigationBarStyle={styles.navBar} titleStyle={styles.navTitle} navBarTintColor={'white'} navBarButtonImageColor={'white'} tintColor={'white'} sceneStyle={styles.routerScene} >
        <Stack key="root">
          <Scene
            key="Screen1"
            component={Screen1}
            animation="fade"
            hideNavBar={true}
            initial={true}
            type='replace'
          />
          <Scene
            key="Screen2"
            component={Screen2}
            animation="fade"
            hideNavBar={true}
            type='replace'
          />
          <Scene
            key="Screen3"
            component={Screen3}
            title="Enrollment"
            animation="slide"
            hideNavBar={false}
            type='replace'
          />
          <Scene
            key="Screen4"
            component={Screen4}
            title="Enrollment"
            animation="slide"
            hideNavBar={false}
            type='replace'
          />

我也尝试过使用下面的代码

componentWillMount(){
    BackHandler.addEventListener('hardwareBackPress', this.onBackPress.bind(this));
  }

  componentWillUnmount(){
    BackHandler.removeEventListener('hardwareBackPress', this.onBackPress.bind(this));
    }

  onBackPress() {
        if (backButtonPressedOnceToExit) {
            BackAndroid.exitApp();
        } else {
            if (Actions.currentScene !== 'Home') {
                Actions.pop();
                return true;
            } else {
                backButtonPressedOnceToExit = true;
                ToastAndroid.show("Press Back Button again to exit",ToastAndroid.SHORT);
                //setting timeout is optional
                setTimeout( () => { backButtonPressedOnceToExit = false }, 2000);
                return true;
            }
        }
    }

当我尝试调试它时,我的调试器不会进入函数内部。 请让我知道我做错了什么。

【问题讨论】:

  • 是因为setTimeout( () =&gt; { backButtonPressedOnceToExit = false }, 2000);这一行在你按回退出之前重置了backButtonPressedOnceToExit标志吗?
  • @max23_ 我尝试删除它但不起作用,甚至我的调试器也无法使用该功能
  • 当你说“调试器不会去那个函数”时,你的意思是onBackPress()吗?
  • 我的反应服务器在重启后出现了一些问题。

标签: react-native react-native-router-flux


【解决方案1】:

使用Router 组件的backAndroidHandler 属性。

&lt;Router navigationBarStyle={styles.navBar} titleStyle={styles.navTitle} navBarTintColor={'white'} navBarButtonImageColor={'white'} tintColor={'white'} sceneStyle={styles.routerScene} backAndroidHandler={this.onBackPress}&gt;

onBackPress 中,您提到了错误的屏幕。 Home 不在您的路由器堆栈中。让它Screen1。在第一个 if 条件下也“返回 true”。

【讨论】:

  • 您好,我尝试了您的更改,不幸的是它不起作用。
  • @suneel 你能删除componentWillMountcomponentWillUnmount 并使onBackPress 成为箭头函数吗?此外,一旦更改完成,您可以在某处发布更新的代码吗? pastebin.com / hastebin.com
  • 我的反应服务器在重启后出现了一些问题,它工作正常。但感谢您指出正确的方向
猜你喜欢
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
相关资源
最近更新 更多