Задняя навигационная петля - PullRequest
0 голосов
/ 29 июня 2019

Я застрял с проблемой в React-Navigation, не могу выйти из цикла обратной петли.

У меня есть StackNavigator, определенный в App.js

const AppNavigator = createAppContainer(createStackNavigator(
    {
        Splash: { screen: Splash },
        Home: { screen: Home, backBehavior: true },
        Servers: { screen: Servers },
        Settings: { screen: Settings },
        Events: { screen: Events },
        Traffic: { screen: Traffic },
        Friends: { screen: Friends },
        UserProfile: { screen: UserProfile },
        [...]
    })

Сценарий:

  • Пользователь открывает приложение, первый маршрут - экран-заставка
  • После загрузки заставки (я делаю некоторые вещи, чтобы подготовить приложение), автоматически происходит переход на главную страницу
  • Пользователь нажимает на значок нижней панели, чтобы увидеть профиль друзей
  • Перейдите на экран друзей с помощью this.props.navigation.navigate('Friends')
  • Экран друзей загружается и показывает список друзей
  • Пользователь нажимает на друга, чтобы просмотреть детали его профиля

Для перехода от Друзей к отдельному профилю я использую:

goToProfile(steamUser)
    {
        this.navigateWithParams('UserProfile', { steamID: steamUser.steamid, goBack: 'Friends' })
    }
navigateWithParams(routeName, params)
    {
        /*var navigationParams = {
            routeName: routeName,       
            params: params,
            key: routeName + uuid()
       };

       console.warn(navigationParams);

        //this.props.navigation.push({ routeName: routeName, params: params, key: uuid() });
        const navigateAction = NavigationActions.navigate(navigationParams);

        this.props.navigation.dispatch(navigateAction);*/

        this.props.navigation.push(routeName, params);
    }

(извините за комментарии, я пробовал много решений).

  • Пользователь приземляется на детали профиля с загруженным профилем (он работает правильно, параметры принимаются на целевом экране)
  • Вкладка «Пользователь» на кнопке «Назад» в заголовке, чтобы вернуться на экран «Друзья»
  • Вернитесь к экрану друзей

Чтобы вернуться назад, я написал служебную функцию для управления обратно на экраны с параметрами:

navigateBack() {


        if (this.props.navigation.state && this.props.navigation.state.params && this.props.navigation.state.params.goBack)
        {
            if (this.props.navigation.state.params.goBackParams)
                this.props.navigation.navigate(this.props.navigation.state.params.goBack, this.props.navigation.state.params.goBackParams);
            else
                this.props.navigation.navigate(this.props.navigation.state.params.goBack);
        }
        else
        {
            this.props.navigation.goBack();
        }
    }
  • Пользователь попадает на экран друзей
  • Пользователь нажимает кнопку «Назад» на экране «Друзья» в шапке
  • Возвращение пользователя на экран UserProfile

Я пытался комментировать if и оставляя только this.props.navigation.goBack (), тот же результат.

Последний шаг - это то, что я считаю неправильным.

Я хочу вернуться домой, потому что для меня стек навигации должен быть:

Главная> Друзья> Профиль пользователя (с параметрами)> Главная

Что я обидел? Может быть, я использую Wronly .navigate или .push или .goBack?

Надеюсь, кто-то может быть.

Спасибо

...