2
  App.js 
    <Store>
      <Navbar />
      <AppNavigator ref={navigatorRef => {
          NavigationService.setTopLevelNavigator(navigatorRef);
        }} />
    </Store> 

我希望能够访问

 props.navigation.openDrawer();

从导航栏,但我得到

undefined is not an object (evaluating 'props.navigation.openDrawer')

onPress
    Navbar.js:70:29
    etc..

如何允许 NavBar 访问抽屉?

4

2 回答 2

3

我想你正在关注没有导航道具的导航(如果你不这样做,那么你应该在你的情况下)。然后在NavigationService.js添加 openDrawer 方法

// NavigationService.js

import { DrawerActions } from 'react-navigation-drawer';

...

// add this function
function openDrawer(routeName, params) {
  _navigator.dispatch(DrawerActions.openDrawer());
}


export default {
  ...
  // and export it
  openDrawer
};

然后代替props.navigation.openDrawer(), 使用

NavigationService.openDrawer()

不要忘记进行相应的导入

于 2019-10-25T23:42:07.347 回答
2

这就是我在没有导航道具的情况下使用 openDrawer 的方式:

在您的 App.js(或其他路由器)中

1/

import { DrawerActions } from '@react-navigation/native';

2/

export const navigationRef = React.createRef();

3/

export function openDrawer(routeName, params) {
  navigationRef.current.dispatch(DrawerActions.openDrawer());
}

4/ 在你的导航容器中添加这个 ref

<NavigationContainer ref={navigationRef}> 

5/ 在创建 openDrawer 的地方调用你的函数:

<TouchableOpacity onPress={() => openDrawer()}>
        <Image
          source={tab}
          style={{
            width: 20,
            height: 20,
          }}
        />
</TouchableOpacity>
于 2020-12-02T11:07:10.587 回答