【问题标题】:React Navigation + Redux close App on Back PressedReact Navigation + Redux 在 Back Pressed 时关闭应用程序
【发布时间】:2017-07-10 17:59:53
【问题描述】:

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

而且,这是我的导航器配置

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
})

【问题讨论】:

    标签: android react-native react-navigation


    【解决方案1】:

    在 react-navigation 存储库中发布 Github 问题后,我得到了答案。

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

    // 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')
      }
    // [...]
    

    更新

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2017-10-24
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多