навигацияОпции в компоненте экрана не работает - PullRequest
0 голосов
/ 16 января 2020

Если я установлю navigationOptions в компоненте экрана внутри StackNavigator , чтобы изменить заголовок стека внутри DrawerNavigator navigationOptions не учитываются. Однако я могу передать defaultNavigationOptions , которые принимаются во внимание. Если я не передам defaultNavigationOptions , это не изменит поведение. Это с response-navigation v 4.x

здесь я создаю экраны навигаторов стека для моего 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);
  }

Затем в своем компоненте я пытаюсь установить navigationOptions стека, но это не учитывается ...

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>
    );
  }
}

1 Ответ

0 голосов
/ 16 января 2020

Хорошо, я обнаружил, что если я пропущу свой экран таким образом

stackRoute[r] =  { screen : First }

вместо

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

, навигационные опции будут приняты во внимание. Однако я не могу передать реквизит таким образом ...

...