Search code examples
react-nativereact-navigationreact-navigation-v5react-navigation-stackreact-navigation-drawer

how to set header "burger" in react-navigation in each stack without duplicate it


i build a stack navigator and i want to add burger to all the screens. right not its work but i pass header for every screen ant it look Clumsy and illegible and overly duplicated

the question there is a way to shortcut or pass it one time (maybe in the Stack.navigator?) example from my code: (look at this lines: headerLeft: () =>< AnimateHamburger navigation={navigation} />,)

const StackNavigator = ({ navigation }) => (
<Stack.Navigator headerMode="screen" navigationOptions screenOptions={stackScreenOptions}>
    <Stack.Screen
        name="Main"
        component={MainScreen}
        headerMode="screen"
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
    />
    <Stack.Screen
        name="MainScreen"
        component={MainScreen}
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
    />
    <Stack.Screen
        options={{
            title: "meetings",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
        name="MeetingPicker"
        component={MeetingPicker}
    />
    <Stack.Screen
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
        name="UserHistory"
        component={UserHistory}
    />
    <Stack.Screen
        name="MyMeetings"
        component={UserHistory}
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
    />
    <Stack.Screen
        name="About"
        component={AboutScreen}
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
    />

    <Stack.Screen
        name="Location"
        component={LocationScreen}
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
    />
    <Stack.Screen
        name="Logout"
        component={LogoutModal}
        options={{
            title: "ליאור",
            headerLeft: () => <AnimateHamburger navigation={navigation} />,
        }}
    />
  </Stack.Navigator>
  );

   export default StackNavigator;

Solution

  • You need to pass it to screenOptions with your stackScreenOptions in your code here:

    <Stack.Navigator headerMode="screen" navigationOptions screenOptions={stackScreenOptions}>
    

    Take a look at the react-navigation docs about this:

    https://reactnavigation.org/docs/screen-options/#screenoptions-prop-on-the-navigator