React Native Switch Navigator: goBack () не работает - PullRequest
0 голосов
/ 04 марта 2019

У меня есть переключатель навигатора:

export default createSwitchNavigator({
  AuthLoading: AuthLoadingScreen,
  EditProfile: EditProfileScreen,
  Login: LoginScreen,
  Register: RegisterScreen,
  ForgotPassword: ForgotPasswordScreen,
  Main: MainTabNavigator,
  MainLoading: MainLoadingScreen,
  TripReport: TripReportScreen,
},
{
  initialRouteName: 'AuthLoading',
});

Когда я нахожусь в «Основном», навигаторе с вкладками, у меня есть кнопка, которая ведет меня к экрану «TripReport»:

onPress={() => navigation.navigate('TripReport', {tripReport: tripReport})}

Когда на TripReportScreen я добавил прослушиватель событий для кнопки «Назад» Android, чтобы вернуться к «Главной», но также и к определенной вкладке:

  componentDidMount() {
    // Add event listener for the Android back button.
    BackHandler.addEventListener("hardwareBackPress", () => {
      this.props.navigation.goBack(null);
      return true
    })
  } 

GoBackфункция не работает.Единственный способ заставить его работать - это

navigation.navigate('Main)

, но это перезагружает «Main» вместо возврата к состоянию, в котором находился экран.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Это потому, что когда вы звоните this.props.navigation.goBack на Main, this.props.navigation фактически относится к вашему MainTabNavigator.Вот почему ваше обратное действие не сработало.

Вам необходимо набрать правильный SwitchNavigator, чтобы отправить back действие на ваш SwitchNavigator, посмотрите несколько способов, предлагаемых на этомнить .

Или вы также можете создать ссылку на свой switchNavigator, зацените этот ответ здесь https://stackoverflow.com/a/54878858/2963461

0 голосов
/ 04 марта 2019

Да, это правильное поведение.Если бы мне пришлось цитировать реагировать на навигацию

Опционально указать ключ, который указывает маршрут для возврата.По умолчанию goBack закроет маршрут, с которого он вызывается.Если цель состоит в том, чтобы вернуться куда-либо, без указания того, что закрывается, вызовите .goBack (null);Обратите внимание, что параметр null полезен в случае вложенных StackNavigators для возврата на родительский навигатор, когда у дочернего навигатора уже есть только один элемент в стеке.

Это будет работать только с StackNavigators.

Надеюсь, это поможет.

...