Parent Navigator中的DrawerActions.toggleDrawer()

问题描述 投票:0回答:2

我具有如下嵌套的导航器结构-父元素是内部嵌套有抽屉的堆栈导航器。我需要通过“堆栈导航器”中的按钮切换打开的抽屉。

const Drawer = createDrawerNavigator();
function DrawerNav() {
  return (
    <Drawer.Navigator initialRouteName="Home">
        <Drawer.Screen
          name="Main"
          component={HomeScreen}
        />
        <Drawer.Screen
          name="Details"
          component={DetailsScreen}
        />
        <Drawer.Screen
          name="About"
          component={AboutScreen}
        />
    </Drawer.Navigator
  );
}

const Stack = createStackNavigator();
export default function App() {
  return (
    <NavigationContainer>
        <Stack.Navigator
             initialRouteName="DrawerNav"
        >
            <Stack.Screen
                name="DrawerNav"
                component={DrawerNav}
                options={{
                   headerLeft: () => (
                      <Icon
                         style={{ padding: 10 }}
                         name="menu"
                         size={30}
                         color="#900"
                         onPress={() => navigation.dispatch(DrawerActions.toggleDrawer())}
                     />
                  ),
                }}
            />
        </Stack.Navigator>
     </NavigationContainer>
  );
}

我最接近Stack Navigator中当前的onpress,该东西应该可以切换子抽屉。但是,添加

const navigation = useNavigation();

进入App()函数会产生以下错误

Error: Couldn't find a navigation object. Is your component inside a screen in a navigator?\\

总之,我需要通过其父级中的按钮来切换抽屉导航。很明显如何将导航操作传递给孩子,但是我很难做到这一点。

reactjs react-native react-navigation react-navigation-stack react-navigation-drawer
2个回答
0
投票

您可以使用以下代码通过按钮单击来切换抽屉-

onPress={() => this.props.navigation.dispatch(DrawerActions.toggleDrawer())}

`


0
投票

options可以接受一个函数并为您提供参数,其中之一是navigation。这是代码:

options={({navigation}) => {
               headerLeft: () => (
                  <Icon
                     style={{ padding: 10 }}
                     name="menu"
                     size={30}
                     color="#900"
                     onPress={() => navigation.dispatch(DrawerActions.toggleDrawer())}
                 />
              ),
            }}

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.