как я могу сбросить навигацию приложения React Native на текущий экран React Navigation

Я пытаюсь создать свое первое приложение React Native, но у меня возникла проблема с навигацией. В моем приложении есть три экрана в навигаторе стека.

Home 
Login 
User (User screen again is a Tab Navigator with three screens UserProfile, UserHome, UserSettings) 

Мой навигатор

const Navigator = StackNavigator(
  {
   Home: {
      screen: HomeScreen
    },
    Login: {
      screen: LoginScreen,
    },
   User: {
      screen: UserTabNavigator,
    }
  },{
    initialRouteName: 'Home'
  },
  {
    navigationOptions: () => ({
      headerTitleStyle: {
        fontWeight: 'normal',
      },
    }),
  }
);

Первоначальный маршрут - Дом, поэтому приложение открывается на главном экране, после чего нажатие на Вход приводит к экрану входа в систему.

Теперь в моем компоненте входа в систему после успешной аутентификации я перенаправляюсь на экран пользователя.

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

Я хотел сбросить стек навигации при успешной аутентификации и установить User screen в качестве корневого, поэтому в функции входа я добавил

const resetAction = NavigationActions.reset({
    index: 0,
    actions: [
        NavigationActions.navigate({ routeName: 'User' })
    ]
});
this.props.navigation.dispatch(resetAction);

Это работает, так как сейчас я не вижу кнопку «Назад», но после входа в систему я вижу странную анимацию смахивания назад и на короткое время вижу главный экран, а затем перенаправляется на экран пользователя.

Что я делаю неправильно?


person abhi    schedule 04.08.2017    source источник
comment
Вы можете сослаться на это stackoverflow.com/questions/43090884/   -  person Ajith Pandian    schedule 06.08.2017


Ответы (1)


Вы можете выполнить обычную навигацию и отключить левый заголовок (или изменить его любым, что вам нужно), тогда вы можете gesturesEnabled: false, поэтому на IOS это не позволит вернуться через смахивание ... это не лучший способ сделать это (это может легко быть худшим способом, так как ваш стек на самом деле не сбрасывается, поэтому ваш индекс может испортиться), но я думаю, что это самая быстрая работа


Изменить: как я сейчас вижу, они исправили эту странную анимацию, поэтому использование обычного сброса должно работать нормально (дата 26 марта 2018 г.)

person jaycee    schedule 05.08.2017