【问题标题】:Complex navigation in React Native using react-navigation and Redux使用 react-navigation 和 Redux 在 React Native 中进行复杂导航
【发布时间】:2017-11-09 18:40:39
【问题描述】:

我的 React Native 应用中有以下导航结构:

StackNavigator 配置了 3 个路由:

  1. 启动画面(React 组件)
  2. StackNavigator 我的登录流程
  3. DrawerNavigator 用于我的核心应用屏幕。

DrawerNavigator 有一些动态多条路由,但也有一条静态路由,即另一条StackNavigator。 一切似乎都按预期工作:

  1. 商店正在相应更新。
  2. 屏幕作品之间的导航。
  3. 在每个组件中配置后,在屏幕工作之间返回,使用以下命令:

    this.props.navigation.goBack();
    

我的问题是 - 有没有办法让我在全球范围内处理 Android 上的后退按钮?目前,当我单击后退按钮时,没有任何反应(由于我使用的是 Redux)。我应该处理每个组件中的后退按钮,还是有办法使用 Redux 来处理?

【问题讨论】:

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


    【解决方案1】:

    有点晚了,但是有一种方法可以用 redux 来处理这个问题。在您创建商店的index.js 文件中,您可以导出一个类并添加一个componentWillMount 调用来处理调度对您的redux 操作的调用。只需记住在上面导入您需要的操作即可。

    const store = configureStore();
    
    export default class Index extends Component {
      componentWillMount = () => {
          BackHandler.addEventListener('hardwareBackPress', () => {
              const { nav: { routes } } = store.getState();
              const currentRouteName = routes[routes.length-1].routeName;
    
              if (currentRouteName === 'EditCoupleProfile') {
                  store.dispatch(editCoupleActions.navigateBack())
              } else if ( currentRouteName === 'EditInterests' ) {
                  store.dispatch(interestsActions.navigateBack())
              } else {
                  store.dispatch(popFromStack());
              }
              return true;
          })
      };
    
      componentWillUnmount = () => {
          BackHandler.removeEventListener('hardwareBackPress');
      };
    
      render() {
          return (
              <Provider store={store}>
                  <AppWithNavigation />
              </Provider>
          );
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2017-11-28
      • 2018-05-23
      相关资源
      最近更新 更多