React Navigation + Redux 在按下返回时关闭应用程序

React Navigation + Redux close App on Back Pressed

将应用程序转换为 redux 后,我的 react-navigation 遇到了一些问题。以前,在与 redux 集成之前,当我按下后退按钮(物理按钮)时,反应导航回到上一个屏幕。与 redux 集成后,返回按钮将关闭应用程序。但是,它仍在使用 goBack() 函数。

而且,这是我的 Navigator 配置

export const AppNavigator = StackNavigator(
    {
        Home: { screen: HomeScreen },
        ChatDetail: { screen: ChatDetail },
        PulsaDetail: { screen: PulsaDetailScreen },
        Pulsa: { screen: Pulsa }
    },
    {
        headerMode: 'none',
    }
)

class AppWithNavigation extends Component {
    render(){
        return(
            <AppNavigator navigation={ addNavigationHelpers({
                dispatch: this.props.dispatch,
                state: this.props.nav,
            })} />
        )
    }
}

const mapStateToProps = (state) => ({
  nav: state.nav
})

export default connect(mapStateToProps)(AppWithNavigation)

编辑:可以通过手动处理和调度返回操作来完成,但不能自动完成吗?就像之前使用 redux 一样?

BackHandler.addEventListener('hardwareBackPress',() => {
    this.props.goBack()
    return true
})

在 react-navigation 仓库 post Github issue 之后,我得到了答案。

应该在屏幕/组件顶部手动添加后台监听器

// App.js
import { BackAndroid } from 'react-native'
// [...]
  componentDidMount() {
    BackAndroid.addEventListener('backPress', () => {
      const { dispatch, nav } = this.props
      if (shouldCloseApp(nav)) return false
      dispatch({ type: 'Back' })
      return true
    })
  }

  componentWillUnmount() {
    BackAndroid.removeEventListener('backPress')
  }
// [...]

更新: