【问题标题】:Open drawer when click on header icon in react navigation 5单击反应导航5中的标题图标时打开抽屉
【发布时间】:2020-03-24 17:04:51
【问题描述】:

当我点击图标时,我正在努力使用 React Navigation 5 打开抽屉,我收到此错误undefined is not an object (evaluating 'navigation.openDrawer')

问题出在headerRight,图标显示正确,但是当我点击它时,我得到了上面的错误。即使我从道具中得到navigation,我也不明白为什么我不能用它来调用openDrawer()

我也测试了navigation.toggleDrawer(),它显示了同样的错误。

我错过了什么?

export default function App({ navigation }) {

  const Stack = createStackNavigator();
  const Drawer = createDrawerNavigator();

  const defaultOptions = {
    headerStyle: {
      backgroundColor: Colors.primary
    },
    headerTitleStyle: {
      fontFamily: "raleway-bold"
    },
    headerBackTitleStyle: {
      fontFamily: "raleway-regular"
    },
    headerTintColor: "white",
    headerRight: () => (
      <TouchableOpacity onPress={() => navigation.openDrawer()}>
        <Ionicons
          name={Platform.OS === "android" ? "md-menu" : "ios-menu"}
          size={32}
          color="white"
          style={styles.menu}
        />
      </TouchableOpacity>
    )
  };

  const createHomeStack = () => (
    <Stack.Navigator>
      <Stack.Screen
        name="Dashboard"
        component={DashboardScreen}
        options={defaultOptions}
      />
      <Stack.Screen
        name="AddExperience"
        component={AddExperienceScreen}
        options={defaultOptions}
      />
      <Stack.Screen
        name="AddEducation"
        component={AddEducationScreen}
        options={defaultOptions}
      />
    </Stack.Navigator>
  );

 return (
    <NavigationContainer>
      <Drawer.Navigator>
        <Drawer.Screen name="Home" children={createHomeStack} />
        <Drawer.Screen name="Dashboard" component={DashboardScreen} />
        <Drawer.Screen name="Profiles" component={ProfilesScreen} />
      </Drawer.Navigator>
    </NavigationContainer>
  );
}

【问题讨论】:

    标签: react-native navigation version native


    【解决方案1】:

    不妨试试:

    const defaultOptions = ({ navigation }) => ({
        headerLeft: () => (
            headerStyle: {
          backgroundColor: Colors.primary
        },
        headerTitleStyle: {
          fontFamily: "raleway-bold"
        },
        headerBackTitleStyle: {
          fontFamily: "raleway-regular"
        },
        headerTintColor: "white",
        headerRight: () => (
          <TouchableOpacity onPress={() => navigation.openDrawer()}>
            <Ionicons
              name={Platform.OS === "android" ? "md-menu" : "ios-menu"}
              size={32}
              color="white"
              style={styles.menu}
            />
          </TouchableOpacity>
        )
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多