Вопрос о настраиваемом заголовке в React Navigation v5 (не кликабельная кнопка возврата)

Привет, я использую React navigation v5. Я пытаюсь реализовать собственный заголовок для определенного экрана. Итак, мой собственный заголовок выглядит так

CustomHeader.js

export function CustomHeader({props}) {
  const {scene, previous, navigation} = props;
  const opacity = scene.route.params.opacity;

  return (
    <React.Fragment>
      <Animated.View style={[styles.headerStyle, {opacity}]}>
        <View style={styles.influencerNameContainer}>
          <Text style={styles.influencerName}>
            {scene.route.params.influencer.user.name}
          </Text>
        </View>
      </Animated.View>

      {previous ? (
/* This is a back button */
        <Button
          style={[styles.iconButton, {left: 0}]}
          icon={BackIcon}
          onPress={() => {navigation.goBack}
        />
      ) : (
        undefined
      )}
    </React.Fragment>
  );
}

Навигатор выглядит так

export function HomeStack() {
  return (
    <Stack.Navigator
      initialRouteName="Home"
      headerMode="screen"
      style={{backgroundColor: 'yellow'}}>

      <Stack.Screen
        name="InfluencerScreen"
        component={InfluencerScreen}
        options={{
          header: props => <CustomHeader props={props} />,
        }}
      />
    </Stack.Navigator>
  );
}

Он отображает настраиваемые заголовки и настраиваемую кнопку возврата, но кнопку возврата нельзя щелкнуть. Я попробовал.

<Stack.Screen
        name="InfluencerScreen"
        component={InfluencerScreen}
        options={{
          header: props => <CustomHeader props={props} />,
          headerLeft: () => (
            <Button title="Back Button" onPress={() => alert('Pressed')} />
          )
        }}
      />

С этим кодом он вообще не отображает кнопку возврата с настраиваемым заголовком. Но он показывает настраиваемую кнопку возврата, когда я удаляю настраиваемый заголовок (header: props =>).

Что мне не хватает?


person freewebwithme    schedule 10.03.2020    source источник


Ответы (2)


Вы показываете настраиваемый заголовок, как вы визуализируете кнопку, зависит от вас. React Navigation не может отображать кнопку возврата, поскольку React Navigation больше не отображает заголовок.

Вместо использования опции headerLeft вам нужно поместить кнопку возврата в свой собственный заголовок.

Также ваше деструктурирование неверно. function CustomHeader({props}) должно быть function CustomHeader(props) (без фигурных скобок).

person satya164    schedule 10.03.2020

Вы дважды деструктурируете props .. Попробуйте:

export function CustomHeader({scene, previous, navigation}) {

  // const {scene, previous, navigation} = props; // remove this

  ...

}

Изменить:

Также goBack - это метод, поэтому используйте круглые скобки. :

onPress={() => navigation.goBack()} // remove unnecessary `curly braces`
person awran5    schedule 10.03.2020