Сброс стека из вложенного навигатора в реагирующей навигации - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть экран, вложенный в навигатор, который находится внутри навигатора.

const AppNavigator = createSwitchNavigator({
AuthLoading,
MainNavigator,
AuthNavigator
},
{
initialRouteName: 'AuthLoading'
});

const AuthNavigator = createStackNavigator({
VerificationNavigator,
OtpVerificationStack
},
{
initialRouteName: 'VerificationNavigator',
header: null,
headerMode: 'none'
});

AppNavigator сначала загружает AuthNavigator, затем из VerificationNavigator (второй экран) я перехожу к OtpVerificationStack, используя навигационные реквизиты.

const OtpVerificationStack = createSwitchNavigator({
OTPLoading,
SignupNavigator,
MainNavigator
},
{ 
initialRouteName: 'OTPLoading',
});

В OtpVerificationStack сначала загружается поток RegistrationNavigator.

const SignupNavigator = createStackNavigator({
FirstName,
LastName,
Email
},
{
header: null,
headerMode: 'none'
});

Экран FirstName состоит из входа в Google, после успешного входа я хочу перейти на MainNavigator или на его экран «Домой»,Я пытался

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

Но, похоже, это не работает.Это ничего не делает!

РЕДАКТИРОВАТЬ: Я попытался установить токен в asyncstorage и на OTPLoadingscreen проверил токен.По сути, мне пришлось сбросить его обратно в OTPVerificationStack, что я мог сделать, сохранив key: null, но я не знаю, является ли это хорошим методом для подражания.

1 Ответ

0 голосов
/ 22 февраля 2019

Я тоже столкнулся с такой проблемой и решил ее с помощью этого потока.

Вы можете сбросить stacknavigator, когда вы находитесь в потоке.

Stack1:

screen1

screen2

screen3 ...

Flow screen1-> screen2-> screen3 (Теперь, если вы хотите сбросить настройки, он будет работать).

Когда выЧтобы сбросить stack1 и перейти к начальному экрану stack2, попробуйте следующее:

navigateToStack(stackName,routeName,params){
        const navigateAction = NavigationActions.navigate({
            routeName: stackName,
            action: NavigationActions.navigate({
                routeName: routeName,
                params: params,
            })
        });
        this.props.navigation.dispatch(navigateAction);
    }

Вы просто правильно указали имя стека, имя экрана экрана. Оно автоматически вернется домой.

this.navigateToStack(MainTab,home,{item:item}):
...