Я застрял с проблемой в 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?
Надеюсь, кто-то может быть.
Спасибо