在 React Navigation 中处理 Drawer Navigator 中的返回导航

Posted

技术标签:

【中文标题】在 React Navigation 中处理 Drawer Navigator 中的返回导航【英文标题】:Handling Back Navigation in Drawer Navigator in React Navigation 【发布时间】:2019-08-01 12:43:22 【问题描述】:

我已经使用 React Navigation V3 在我的应用程序中成功创建了一个导航抽屉。但是当我使用抽屉打开两个页面后,单次后按,页面直接重定向到主页而不是上一页时,就会出现问题。

我希望应用程序流程与 stacknavigator 类似,但 back() 函数在抽屉导航器中也不可用。这是我的抽屉导航器:

const DrawerNavigator = createDrawerNavigator(
    Home: 
        screen:HomeScreen
    ,
    Events: 
      screen: EventsScreen
    ,
    Waste: 
      screen: ReportWasteScreen
    
  ,
  DrawerConfig
);

如何修改代码,以便在打开事件屏幕后打开废屏时,单次后按,页面应该重定向到事件屏幕而不是主屏幕?

【问题讨论】:

facebook.github.io/react-native/docs/backhandler 【参考方案1】:

使用“BackHandler”事件自定义路由

【讨论】:

我在抽屉导航器中找到了使用堆栈导航器的解决方案。请看我发布的答案!谢谢! :)【参考方案2】:

我使用这个link 中的答案找到了解决方案。

import createDrawerNavigator, createStackNavigator, createAppContainer from 'react-navigation'
class App extends Component 
    render() 
        return (
            <View style= flex: 1, backgroundColor: 'transparent' >
                <AppDrawerNavigator />
            </View>
        )
    


const AppStackNavigator = createStackNavigator(
    Home: HomeScreen,
    Events: EventsScreen,
    Waste: WasteScreen
);

const AppDrawerNavigator = createDrawerNavigator(
    Home: AppStackNavigator
);

export default createAppContainer(AppDrawerNavigator);

此解决方案在抽屉导航器中创建一个堆栈导航器,这使得在抽屉导航器中单击的链接每次都会打开一个新页面。后处理在这里自动完成。

另外,为了去掉stack navigator的默认header,我添加了如下代码:


  headerMode:'none',
  navigationOptions: 
    headerVisible: false,
  

AppStackNavigator

【讨论】:

以上是关于在 React Navigation 中处理 Drawer Navigator 中的返回导航的主要内容,如果未能解决你的问题,请参考以下文章

在异步函数中导航 - React Navigation - React Native

React Navigation - 即使安装并链接了手势处理程序,“无法读取未定义的属性‘状态’”

react-native 学习 ----- React Navigation

react-navigation 做导航栏,发现 Android 上的标题不居中

react-navigation 3 在嵌套堆栈中重置

如何在打字稿中使用 react-navigation 的 withNavigation?