0

If I set the navigationOptions in the screen component inside a StackNavigator to change the header of the stack inside a DrawerNavigator the navigationOptions are not taken into account. I can however pass defaultNavigationOptions which are taken into account. If I don't pass defaultNavigationOptions it doesn't change the behavior. This is with react-navigation v 4.x

here I create the Stack navigators screens for my Drawer

  drawerNavigator = () => {
    let drawerRoutes = {}
    this.state.routes.forEach(r => {
      let stackRoute = {}
      let t = () => <First name={r} />
      stackRoute[r] =  { screen : t }
      let stackOptions = {
        initialRouteName: r,
        defaultNavigationOptions: stackNavigationOptions
      }
      let s = createStackNavigator(stackRoute, stackOptions)
      drawerRoutes[r] = { screen : s }
    })

    let drawerOptions = {
      drawerWidth: '75%',
      initialRouteName: this.state.routes[0],
      contentComponent: props => <Menu {...props} />,
      contentOptions: drawerItemsOptions
    }
    return createDrawerNavigator(drawerRoutes, drawerOptions);
  }

Then in my component I try to set the navigationOptions of the Stack but it is not taken into account...

export default class First extends Component {
  static navigationOptions = ({ navigation }) => {
    return {
      headerTitle: 'hahahaha',
      headerRight: () => (
        <Button
          onPress={() => alert('This is a button!')}
          title="Info"
          color="#fff"
        />
      ),
    }
  }

  render() {
    return (
      <SafeAreaView style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
      <StatusBar transluscent backgroundColor="transparent" barStyle="dark-content" />
        <Text>{this.props.name}</Text>
      </SafeAreaView>
    );
  }
}
Nicolas Manzini
  • 8,379
  • 6
  • 63
  • 81

1 Answers1

0

Okay I've discovered that if I pass my screen that way

stackRoute[r] =  { screen : First }

instead of the

let t = () => <First name={r} />
stackRoute[r] =  { screen : t }

the navigationOptions are taken into account. However I cannot pass props that way....

Nicolas Manzini
  • 8,379
  • 6
  • 63
  • 81